c#Regex仅用于数字和短划线

本文关键字:数字 用于 c#Regex | 更新日期: 2023-09-27 18:19:34

我的c#代码中有以下内容-我喜欢它做的是检查表达式是否有数字或短划线,但没有其他内容。如果我把字母K和破折号或数字一起输入,它仍然接受它。我怎么说只是用数字或破折号:

     Match match = Regex.Match(input, @"[0-9-]");

请注意,输入是我传递给评估的文本。

c#Regex仅用于数字和短划线

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 }