Winforms 文本框允许用户只输入字母、数字、点和单词之间的空格。正则表达式

Posted

技术标签:

【中文标题】Winforms 文本框允许用户只输入字母、数字、点和单词之间的空格。正则表达式【英文标题】:Winforms textbox allow user to input only letters, numbers, dots and spaces between words. Regex 【发布时间】:2020-08-18 20:37:27 【问题描述】:

大家好,在我的桌面应用程序中,我想创建正则表达式模式以允许用户仅插入 LETTRRSNUMBERS_ - .

示例:

公司名称只能包含以下字符:

TestCompany1 Second_Compay 最佳公司 123 My-Company d.o.o Stack.Oveflow-Company_

我的尝试:

 string companyName = "My Company #%";

  if(Regex.IsMatch(companyName, @"^[a-zA-Z0-9_.-]+$"))
  
     MessageBox.Show("Company name contain invalid characteds");
  
  else 
  
        // success
   

但这不起作用。

我只需要那个用户只能输入:

字母、数字、点、下划线、- 和单词之间的特殊字符以及名称中不允许的所有其他特定字符。

我在正则表达式模式中有错误吗?

【问题讨论】:

这是逻辑错误。 if(Regex.IsMatch(companyName, @"^[a-zA-Z0-9_.-]+$")) 然后成功否则错误 可能是这样的^[a-zA-Z0-9_]+(?:[-.][a-zA-Z0-9_]+)*(?: [a-zA-Z0-9_]+(?:[-.][a-zA-Z0-9_]+)*)*$regex101.com/r/HdJuw4/1 @第四只鸟感谢人,这是我需要的模式。我测试并且这项工作。您可以发布作为答案,我会接受。 如果你没有修复你的程序逻辑,任何“正确”的正则表达式都不会起作用。您还忘记在您的模式中添加空格 \s 【参考方案1】:

正如 Wiktor Stribiżew 在 cmets 中指出的那样,您的逻辑表明当有一个有效模式时

if(Regex.IsMatch(companyName, @"^[a-zA-Z0-9_.-]+$"))

然后显示:

 MessageBox.Show("Company name contain invalid characteds");

应该反过来。

您可以在字符类[-.] 中以重复模式使用点和连字符作为分隔符。

如果你把它们作为第一部分,它们将不会在开头和结尾匹配。

然后您可以使用与第一部分相同的逻辑使用另一个重复模式,这次前面有一个空格。

^[a-zA-Z0-9_]+(?:[-.][a-zA-Z0-9_]+)*(?: [a-zA-Z0-9_]+(?:[-.][a-zA-Z0-9_]+)*)*$

Regex demo

【讨论】:

【参考方案2】:

您忘记包含空格字符。正如 cmets 中提到的,您的逻辑是相反的:

if (Regex.IsMatch(companyName, @"^([a-zA-Z0-9_.-]|\s)+$"))

    Console.WriteLine("Valid");

else 

    Console.WriteLine("Company name contains invalid characters");

【讨论】:

以上是关于Winforms 文本框允许用户只输入字母、数字、点和单词之间的空格。正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

防止用户使用 jQuery 在文本框中输入非数字 [重复]

在 C# winforms 应用程序中使用文本框过滤 Treeview

文本框只允许输入数字.net/javascript

c#WINFORM中验证在文本框输入的只能是数字和字母,这个怎么做???

验证文本框只允许数字,没有特殊字符或字母[重复]

用于文本框验证的 HTML5 正则表达式模式:仅允许字母、空格和某些字符