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

Nat*_*Pet 18 c# regex

我在我的c#代码中有以下内容 - 我喜欢它做的是检查表达式是否有数字或破折号但没有别的.如果我输入字母K以及短划线或数字,它仍然接受它.我怎么说快递是数字还是短划线:

     Match match = Regex.Match(input, @"[0-9-]");
Run Code Online (Sandbox Code Playgroud)

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

Han*_*ing 40

Match match = Regex.Match(input, @"^[0-9-]*$");
Run Code Online (Sandbox Code Playgroud)

^意味着匹配应该从输入的开头开始$,它应该在输入的结尾处结束.

*意味着(仅)0或更多的数字或短划线应该在那里(+而是使用1或更多).

  • 不,在开头或结尾(在[[]`之间)的破折号是文字破折号,而不是范围字符. (7认同)

myn*_*fey 10

您的正则表达式匹配字符串中存在的任何数字或短划线,请尝试以下操作:

Regex.Match(input, @"^[\d-]+$");
Run Code Online (Sandbox Code Playgroud)

^ 字符串的开头

[\d-]+ 一个或多个数字或短划线

$ 字符串结束


Man*_*nas 5

以下任何正则表达式都可以正常工作。

[0-9\-]+  ( + one or more occurance)

[\d\-]+ (as \d represents numbers)
Run Code Online (Sandbox Code Playgroud)

如果需要-必须在数字之间

[\d]+\-*[\d]+ will match any of following
90909900
9090-9009
900--900
Run Code Online (Sandbox Code Playgroud)

如果您只想在数字之间使用一个(或不使用),则

[\d]+\-?[\d]+ will match any of following
90909900 pass
9090-9009 pass
900--900 fail
Run Code Online (Sandbox Code Playgroud)

  • [\ d] + \-* [\ d] +正是我想要的。 (2认同)