代码之家  ›  专栏  ›  技术社区  ›  Seeven

RegEx精确匹配^abc$不起作用

  •  1
  • Seeven  · 技术社区  · 11 年前

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

    法语手机号码以开头 06 07 后跟8位数字,如下所示: 0611223344 0744332211 这些数字的国际形式以 +33 它取代了第一个 0 ,例如: +33611223344 +33744332211 .

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

    我添加了单词边界( \b )所以像06112233440611223344这样的数字(两个连接的正确形式)不匹配。

    此RegEx适用于以下情况:

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

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

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

    它们都匹配。。。

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

    2 回复  |  直到 11 年前
        1
  •  1
  •   Avinash Raj    11 年前

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

    ^(?:(?: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

        2
  •  0
  •   vks    11 年前
    ^(\+\b33|\b0)[67][0-9]{8}$
    

    正则表达式工作正常。只需添加锚点即可。

    请参见演示。

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