大家好,在我的桌面应用程序中,我想创建一个regex模式,允许用户只插入 LETTRRS
, NUMBERS
和 _ - .
.
例如:公司名称只能包含以下字符: :
公司名称只能包含这个字符。
我试过了
string companyName = "My Company #%";
if(Regex.IsMatch(companyName, @"^[a-zA-Z0-9_.-]+$"))
{
MessageBox.Show("Company name contain invalid characteds");
}
else
{
// success
}
但这行不通
我只需要用户只能输入
字母,数字,点,下划线。-
和speca之间的单词所有其他特定字符不允许在名称中。
我在regex模式中是否有错误?
正如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_]+)*)*$
你忘了加入空格字符。正如评论中提到的,你的逻辑是反过来的。
if (Regex.IsMatch(companyName, @"^([a-zA-Z0-9_.-]|\s)+$"))
{
Console.WriteLine("Valid");
}
else
{
Console.WriteLine("Company name contains invalid characters");
}