【问题标题】:RegEx exact match ^abc$ doesn't work正则表达式完全匹配 ^abc$ 不起作用
【发布时间】:2014-09-04 09:05:54
【问题描述】:

我正在尝试在 JavaScript 中使用正则表达式来测试表单文本输入的值是否是法国手机号码。

法国手机号码以0607 开头,后跟8 位数字,例如:06112233440744332211。这些数字的国际形式以+33 开头,它替换了第一个0,例如:+33611223344+33744332211

我正在使用这个正则表达式:(\+\b33|\b0)[67][0-9]{8}\b,它测试输入是否以 +336/7 或 06/7 开头,后跟 8 位数字。

我添加了单词边界 (\b),因此 06112233440611223344(两个连接的正确形式)之类的数字不匹配。

这个正则表达式适用于这些情况:

0611223344 // matches
0744332211 // matches
+33611223344 // matches
+33744332211 // matches
06112233440744332211 // doesn't match

但我仍然遇到这些输入的问题:

+33611223344+33611223344
0611223344 0744332211
0744332211+33611223344
0744332211 +33611223344

它们都匹配...

我尝试以所有可能的方式将^$ 添加到我的RegEx,但每当我添加其中一个符号时,RegEx 就不再起作用了。

【问题讨论】:

    标签: javascript regex phone-number exact-match


    【解决方案1】:

    您可以使用下面的正则表达式来匹配所有法国电话号码,

    ^(?:(?:0|\+33)(?:6|7))\d{8}$
    

    DEMO

    如果你想匹配06 21 05 65 48+33 6 21 05 65 48这种格式的数字,请使用下面的正则表达式,

    ^(?:(?:(?:0|\+33)(?:6|7))\d{8}|0[67](?: \d{2}){4}|\+33 [67](?: \d{2}){4})$
    

    DEMO

    【讨论】:

    • 也应该很高兴接受这些表格:06 21 05 65 48 和 +33 6 21 05 65 48
    • @labilbe 为什么? op没有提到这一点。
    • 因为法国用户也倾向于这样输入数字。因此,您的正则表达式可以提供更好的输入检查。
    • 确实我没提过,但这也是写法文数字的一种常见形式。不过,我不知道表格是否应该接受间隔表格。
    • @AvinashRaj:你能解释一下为什么你使用“非捕获组”(?:) 吗?
    【解决方案2】:
    ^(\+\b33|\b0)[67][0-9]{8}$
    

    您的正则表达式工作正常。只需添加锚点。

    查看演示。

    http://regex101.com/r/pP3pN1/35

    【讨论】:

    • 感谢您的演示。原来我正在测试我的 RegEx (regexr.com) 的网站,没有将新行视为单独的输入......
    • ERRATUM:只要您设置/ /gm 标签(而不仅仅是/ /g,就像默认设置),regexr.com 确实会考虑换行。 (我仍然认为 regex101 更好)。
    • @SeevenByakko /m us multiline。如果你想在多行上测试它,你甚至必须在 regex101.com 上设置它。\g ifs 用于全局匹配。所以它返回所有 match.flags必须在任何地方设置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    • 2017-12-27
    • 1970-01-01
    相关资源
    最近更新 更多