如何使用正则表达式判断一个字符串是否有10个数字?

7

我需要找到一个正则表达式,测试输入字符串是否恰好包含10个数字字符,同时仍允许字符串中的其他字符。

我将在后处理中剥离所有非数字字符,但我需要客户端验证的正则表达式。

例如,以下内容都应该匹配:

  • 1234567890
  • 12-456879x54
  • 321225 -1234AAAA
  • xx1234567890

但以下内容不应该匹配:

  • 123456789 (数字不够)
  • 12345678901 (数字太多)

这似乎应该很简单,但我就是想不出来。

3个回答

15
/^\D*(\d\D*){10}$/

基本上,匹配任意数量的非数字字符,接着是一位数字,然后再跟上任意数量的非数字字符,这样的结构需要出现10次。


谢谢。这个对我的测试用例起作用,但我承认我不理解它。我知道\D是非数字,\d是数字,^和$分别是开始和结束,{10}表示恰好10次。所以,虽然我理解所有的符号,但我只是不理解幕后的魔力。我在这里看到一些关于匹配跨多行的评论,但由于我正在验证单行文本框,所以这个方法可以胜任工作。 - JeffK
实际上,我刚刚阅读了你已经写好的描述。那很有道理。 - JeffK
针对这个特定的例子,是否需要使用 ^?它应该匹配字符串的开头...但是,它的真正目的是什么?无论是保留还是删除表达式,都可以匹配字符串,那么添加它的目的是什么? - Hugo Allexis Cardona
@HugoAllexisCardona 它的目的是确保没有太多的数字。 - Pascamel

0
可能有更简单的方法,但这应该可以做到。
/^([^\d]*\d){10}[^\d]*$/

如果您首先剥离所有非数字字符,然后在结果上进行测试,那么正则表达式的处理会变得更加容易。然后它就是一个简单的

/^\d{10}$/

0
^\D*(\d\D*){10}\D*$

末尾的额外\D*是不必要的。末尾的任何非数字都会被视为第10个捕获组的一部分。 - Amber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接