Winforms文本框允许用户只输入字母、数字、点和单词之间的空格。重组词

问题描述 投票:-1回答:1

大家好,在我的桌面应用程序中,我想创建一个regex模式,允许用户只插入 LETTRRS, NUMBERS_ - ..

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

公司名称只能包含这个字符。

  • TestCompany1
  • 第二次补偿
  • 最佳公司123
  • 我的公司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
   }

但这行不通

我只需要用户只能输入

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

我在regex模式中是否有错误?

c# .net regex winforms
1个回答
1
投票

正如Wiktor Stribiżew在评论中指出的,你的逻辑规定,当有一个有效的模式。

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_]+)*)*$

注册表演示


1
投票

你忘了加入空格字符。正如评论中提到的,你的逻辑是反过来的。

if (Regex.IsMatch(companyName, @"^([a-zA-Z0-9_.-]|\s)+$"))
{
    Console.WriteLine("Valid");
}
else 
{
    Console.WriteLine("Company name contains invalid characters");
}
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.