【问题标题】:Winforms textbox allow user to input only letters, numbers, dots and spaces between words. RegexWinforms 文本框允许用户只输入字母、数字、点和单词之间的空格。正则表达式
【发布时间】: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

标签: c# .net regex winforms


【解决方案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");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-09
      • 1970-01-01
      相关资源
      最近更新 更多