只接受数字(0-9)和无字符的正则表达式[重复]
Posted
技术标签:
【中文标题】只接受数字(0-9)和无字符的正则表达式[重复]【英文标题】:Regex that accepts only numbers (0-9) and NO characters [duplicate] 【发布时间】:2013-11-11 23:27:33 【问题描述】:我需要一个只接受 0-9 的数字而不接受其他数字的正则表达式。没有字母,没有字符。
我认为这会起作用:
^[0-9]
甚至
\d+
但这些都接受字符:^、$、(,) 等
我认为上面的两个正则表达式都可以解决问题,但我不确定它为什么接受这些字符。
编辑:
这正是我正在做的:
private void OnTextChanged(object sender, EventArgs e)
if (!System.Text.RegularExpressions.Regex.IsMatch("^[0-9]", textbox.Text))
textbox.Text = string.Empty;
这是允许我上面提到的字符。
【问题讨论】:
你确定吗?[0-9]
只会匹配 0-9...你是如何测试的?
这些应该可以。你可以通过测试来验证here。您的代码可能还有其他问题。
\d+ 当然可以正常工作,如果你有 "ab1-56$p" IsMatch 将返回 true,因为它匹配字符串中的数字,但 MatchCollection matches = new RegEx(@"(\d+)").Matches("ab1-56$p");
会给你 2 个匹配项提取 1 和 56
Validators.pattern("^[0-9]10$")
【参考方案1】:
您的正则表达式^[0-9]
匹配任何以数字开头的,包括像“1A”这样的字符串。为避免部分匹配,请在末尾附加 $
:
^[0-9]*$
这接受任意数量的数字,包括无。要接受一位或多位数字,请将 *
更改为 +
。要只接受一位数字,只需删除 *
。
更新:您混淆了IsMatch
的参数。模式应该是第二个参数,而不是第一个:
if (!System.Text.RegularExpressions.Regex.IsMatch(textbox.Text, "^[0-9]*$"))
注意:在 javascript 中,\d
等价于 [0-9]
,但在 .NET 中,\d
默认匹配任何 Unicode decimal digit,包括像 ဋ္ဌ 这样的异国情调(缅甸 2)和 ? (N'Ko 9)。除非您的应用准备好处理这些字符,否则请坚持使用 [0-9]
(或提供 RegexOptions.ECMAScript 标志)。
【讨论】:
这个正则表达式允许一个只有“$”的字符串,请看我的编辑。 /^[0-9]*$/ 作为正确答案。 在 Javascript 中允许值 123-456(\d)*$
@xpioneer: ^ 和 $ 被称为 anchors。 ^ 匹配字符串的开头,$ 匹配字符串的结尾。通过将 ^ 放在正则表达式的开头并将 $ 放在末尾,可以确保在正则表达式之前或之后不允许其他字符。例如,正则表达式[0-9]
匹配字符串“9”以及“A9B”,但正则表达式^[0-9]$
仅匹配“9”。
以防万一有人想允许负号(-)。 /^-?[0-9]*$/以上是关于只接受数字(0-9)和无字符的正则表达式[重复]的主要内容,如果未能解决你的问题,请参考以下文章