如何使用正则表达式验证字符串是否正常,只要它包含10位数字?

时间:2011-02-15 18:53:13

标签: regex

我正在处理来自Web表单的输入。基本上,我所关心的是所提供的价值包括10位数,不多也不少。

这些是有效输入:

1234567890
123 456 789 0 Hello!
My number is: 123456-7890 thanks

这些无效输入:

123456789033 (too long)
123 Hello! (too short)
My number is one five zero nine thanks (no digits)

我用Regextester尝试了很多不同的东西,但它从未正确匹配过。我正在使用'preg'设置(这是我认为我的CMS Typo3使用的),我最接近的尝试是:

([0-9][^0-9]*){10}

有点蹩脚,但是我最接近。

干杯!

编辑:我不能使用任何编程语言来实现这一点。想象一下,我面前有一个管理控制台字段,我必须输入一个用于验证值的正则表达式。这就是我拥有的所有纬度。欢呼声。

2 个答案:

答案 0 :(得分:4)

我认为你有正确的想法。也许您可以将其简化为(\d\D*){10}

如果正则表达式必须与完整字符串匹配,则需要\D*(\d\D*){10}

更新:看起来你需要^\D*(\d\D*){10}$来确保你匹配完整的字符串。

答案 1 :(得分:1)

正则表达式并不总是这类工作的最佳工具。在这种情况下,编写一个函数来计算字符串中的位数可能更容易也更简单。 (由于你没有提到编程语言,我将在我的例子中使用Python。)

def count_digits(s):
    return len([x for x in s if x.isdigit()])

然后,您可以像这样使用它:

s = "My number is: 123456-7890 thanks"
if count_digits(s) == 10:
    print("looks okay")
else:
    print("doesn't contain 10 digits")