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

Regex 如何使用正则表达式验证一个字符串是否可以,只要它包含10位数字?,regex,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) 这些将是无效的输入: 1234567890 123 456

我正在处理来自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)
这些将是无效的输入:

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)
我试过很多不同的东西,但都不匹配。我正在使用“preg”设置(这是我认为我的CMS Typo3使用的设置),我最近的尝试是:

([0-9][^0-9]*){10}
这有点差劲,但是我能找到的最接近的

干杯


编辑:我无法使用任何编程语言来实现此功能。假设我前面有一个管理控制台字段,我必须在其中输入一个正则表达式,用于验证值。这就是我所有的自由。干杯。

我想你的想法是对的。也许您可以将其简化为
(\d\d*){10}

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


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

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

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


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

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

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

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

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

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

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


您必须为此使用正则表达式吗?编写一个函数来计算字符串中的位数会越来越简单,然后将其与10进行比较。格雷格:如果你认为这会越来越简单,那就把这个函数作为答案发布吧。你必须使用正则表达式吗?编写一个函数来计算字符串中的位数会越来越简单,然后将其与10进行比较。格雷格:如果你认为这会越来越简单,那就把这个函数作为答案发布吧。谢谢格雷格。我澄清了我最初的帖子,说我不能在这种情况下使用编程语言。对不起,好的。我希望这个答案对其他有类似问题的人有用。不清楚过程性Python代码对寻找正则表达式的人有多有用。谢谢Greg。我澄清了我最初的帖子,说我不能在这种情况下使用编程语言。对不起,好的。我希望这个答案对其他有类似问题的人有用。不清楚过程Python代码对寻找正则表达式的人有多有用。我认为您需要
(\D*\D\D*)
来匹配不以数字开头的字符串,如第三个匹配示例。谢谢大家。最接近的似乎是:“(\D*\D\D*){10}”,但它仍然匹配太多。例如,如果有12345678904444444,则返回4个匹配项:12345678904444444,0,4。(最后两场比赛对我来说完全是个谜。)干杯@亚当:我明白了,看起来你可能需要我的第三个例子。@Gabe:也许我做错了什么,但第三个例子对我不适用。如果我测试
1234567890
,它将匹配
1234567890
0
。如果我测试
12345678909
,则不存在匹配项。再次感谢@亚当:我记得你说过你想精确匹配10位数
12345678909
有11位数字,所以您不希望它不匹配吗?我想您需要
(\D*\D\D*)
来匹配不以数字开头的字符串,如第三个匹配示例。谢谢大家。最接近的似乎是:“(\D*\D\D*){10}”,但它仍然匹配太多。例如,如果有12345678904444444,则返回4个匹配项:12345678904444444,0,4。(最后两场比赛对我来说完全是个谜。)干杯@亚当:我明白了,看起来你可能需要我的第三个例子。@Gabe:也许我做错了什么,但第三个例子对我不适用。如果我测试
1234567890
,它将匹配
1234567890
0
。如果我测试
12345678909
,则不存在匹配项。再次感谢@亚当:我记得你说过你想精确匹配10位数
12345678909
有11位数字,所以您不认为它不匹配吗?