如何解决这个正则表达式?

时间:2010-07-28 14:58:32

标签: regex

帮助需要在这个正则表达式中修复一个小东西

^\d{2}\-\d{3}\-\d{6}

验证此格式11-111-111111。它工作正常。但最后一个(6位数)也验证超过6位数。这意味着如果我把11-111-11111111(最后一部分的8位数),上面的正则表达式验证它?

有人可以告诉我如何将其限制为6位数吗?

9 个答案:

答案 0 :(得分:11)

还要使用字符串的开头($)标记字符串的结尾(^):

^\d{2}\-\d{3}\-\d{6}$

现在整个字符串必须与此模式匹配。

答案 1 :(得分:5)

在正则表达式的末尾添加$$是字符串或行结束锚,并且将确保最后一节中的数字不超过6位(因为字符串必须在此之后结束)。

答案 2 :(得分:2)

您希望使用$来表示该行的结尾,就像您使用^来表示该行的开头一样。

答案 3 :(得分:1)

我能够通过在正则表达式的末尾添加$来实现。这将使其在比赛结束时仅识别6位数。

目前,它匹配您的8位数字条目,因为它以前6位开头。

答案 4 :(得分:1)

如果你想捕捉字符串,即使它不是一行的结尾,请使用

^\d{2}\-\d{3}\-\d{6}\D

指定6位数之后的东西必须是非数字。

答案 5 :(得分:1)

^\d{2}-\d{3}-\d{6}(?:\D|$)

最后一部分(?:\D|$)匹配任何不是数字或行尾

的内容

答案 6 :(得分:0)

$放在正则表达式的末尾。

此符号表示“结束表达”。

答案 7 :(得分:0)

(^\d{2}\-\d{3}\-\d{6})\D

将匹配6位数后跟非数字的任何内容,假设您实际上并不希望该行结束。

答案 8 :(得分:0)

你的正则表达式的基础是存在的,但你需要放入边界。

以下正则表达式匹配您想要的并捕获数字字符串。它的两端都是非数字或字符串的开头/结尾。

(?:[^\d]|^)(\d{2}-\d{3}-\d{6})(?:[^\d]|$)