Winforms 文本框允许用户只输入字母、数字、点和单词之间的空格。正则表达式
Posted
技术标签:
【中文标题】Winforms 文本框允许用户只输入字母、数字、点和单词之间的空格。正则表达式【英文标题】:Winforms textbox allow user to input only letters, numbers, dots and spaces between words. Regex 【发布时间】:2020-08-18 20:37:27 【问题描述】:大家好,在我的桌面应用程序中,我想创建正则表达式模式以允许用户仅插入 LETTRRS
、NUMBERS
和 _ - .
。
示例:
公司名称只能包含以下字符:
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 文本框允许用户只输入字母、数字、点和单词之间的空格。正则表达式的主要内容,如果未能解决你的问题,请参考以下文章
在 C# winforms 应用程序中使用文本框过滤 Treeview