我正在处理来自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}
有点蹩脚,但是我最接近。
干杯!
编辑:我不能使用任何编程语言来实现这一点。想象一下,我面前有一个管理控制台字段,我必须输入一个用于验证值的正则表达式。这就是我拥有的所有纬度。欢呼声。
答案 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")