只接受数字(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)和无字符的正则表达式[重复]的主要内容,如果未能解决你的问题,请参考以下文章

只接受字符、数字和特殊字符的正则表达式,而不是 [重复]

正则表达式 只能出现一次或0次

正则表达式 判断字符串是否为数字

匹配字符串中至少 1 个数字和 1 个字符的正则表达式模式

正则表达式判断相关数字小数点正负号组成特殊字符串等

在哪里添加正则表达式的代码以确保只接受数字[重复]