c#Regex仅用于数字和短划线
本文关键字:数字 用于 c#Regex | 更新日期: 2023-09-27 18:19:34
我的c#代码中有以下内容-我喜欢它做的是检查表达式是否有数字或短划线,但没有其他内容。如果我把字母K和破折号或数字一起输入,它仍然接受它。我怎么说只是用数字或破折号:
Match match = Regex.Match(input, @"[0-9-]");
请注意,输入是我传递给评估的文本。
Match match = Regex.Match(input, @"^[0-9-]*$");
^
意味着匹配应该从输入的开头开始,$
意味着它应该在输入的末尾结束。
*
意味着(只有)0个或更多的数字或破折号(使用+
表示1个或更多)。
您的Regex匹配字符串中存在的任何数字或破折号,请尝试以下操作:
Regex.Match(input, @"^['d-]+$");
^
字符串的启动
['d-]+
一个或多个数字或破折号
$
字符串结束
以下任何Regex都可以正常工作。
[0-9'-]+ ( + one or more occurance)
['d'-]+ (as 'd represents numbers)
如果你想-必须在数字之间
['d]+'-*['d]+ will match any of following
90909900
9090-9009
900--900
如果您只想在数字之间使用一个或不使用,然后
['d]+'-?['d]+ will match any of following
90909900 pass
9090-9009 pass
900--900 fail
您需要转义第二个破折号。
Match match = Regex.Match(input, @"[0-9'-]");
我承认我没有试过,但它应该有效。
这实际上只适用于一个角色。如果您希望它包含多个字符,如"123-5",则将正则表达式更改为.
Match match = Regex.Match(input, @"[0-9'-]+");
如果这是一个字符串数组,请考虑使用LINQ完成它?
if (arrInput.Any(s => (!Regex.IsMatch(s, @"^['d-]+$")))){ //OK }