Regex 法国电话号码的正则表达式

Regex 法国电话号码的正则表达式,regex,Regex,我正在尝试实现一个正则表达式,它允许我检查一个号码是否是有效的法语电话号码 一定是这样的: 0X XX XX XX XX ^(?:\+33\s|0)[1-9](?:\s\d{2}){4}$ 或: 这是我实现的,但它是错误的 /^(\+33\s[1-9]{8})|(0[1-9]\s{8})$/ 试试这个: /^(\+33 |0)[1-9]( \d\d){4}$/ 您可以使用: ^ (?:(?:\+|00)33|0) # Dialing code \s*[1-

我正在尝试实现一个正则表达式,它允许我检查一个号码是否是有效的法语电话号码

一定是这样的:

0X XX XX XX XX
    ^(?:\+33\s|0)[1-9](?:\s\d{2}){4}$
或:

这是我实现的,但它是错误的

/^(\+33\s[1-9]{8})|(0[1-9]\s{8})$/
试试这个:

/^(\+33 |0)[1-9]( \d\d){4}$/
您可以使用:

^
    (?:(?:\+|00)33|0)     # Dialing code
    \s*[1-9]              # First number (from 1 to 9)
    (?:[\s.-]*\d{2}){4}   # End of the phone number
$



它允许使用空格或
-
作为分隔符,或者根本不使用分隔符

将正则表达式拆分为两个单独的部分:

  • 前缀可以是
    +33 X
    0X

  • 数字的其余部分(
    XX XX XX XX

正则表达式将是:

^((?:\+33\s|0)[1-9](?:\s\d{2}){4})$
   ^ non-capturing group for prefix
                      ^ non-capturing group for number
 (                                 )
 ^ actual capture group from your original regex
这只允许空白作为分隔符;如果你想要更开放的东西,那就更冗长

注: 根据Thomas的评论,由于正则表达式是使用开始和结束标记(
^$
)的完全匹配,因此捕获组是不必要的。然后,您可以将其取出,使其看起来像这样:

0X XX XX XX XX
    ^(?:\+33\s|0)[1-9](?:\s\d{2}){4}$
它应该很好用

var phoneExp = /^((\+)33|0|0033)[1-9](\d{2}){4}$/g;
它还考虑了0033场景。

一个复杂的示例(我正在使用的示例):

例如,它匹配以下每一行:

0123456789
01 23 45 67 89
01.23.45.67.89
0123 45.67.89
0033 123-456-789
+33-1.23.45.67.89
+33 - 123 456 789
+33(0) 123 456 789
+33 (0)123 45 67 89
+33 (0)1 2345-6789
+33(0) - 123456789
更多:


    • 格式的正则表达式:0X-XX-XX-XX-XX+33 X XX-XX-XX-XX

      ^(0|\+33 )[1-9]([-. ]?[0-9]{2} ){3}([-. ]?[0-9]{2})$
      

      我知道这个问题已经问了很长时间了,但我在那篇文章中尝试了几种解决方案。没有一个能满足我的要求,所以我想出了这个定制的/沉重的一个,它可以处理法国号码(我想是任何格式的)和比利时电话号码

          def phone_pattern():
              """
                      \+\d{2}[-.\s]?(?:\(0\)|0)*?[-.\s]?          # Dialing code +CC00(0) or +CC00 or +CC00 0
                      00[-.\s]?\d{2}[-.\s]?(?:\(0\)|0)*?[-.\s]?   # Dialing code 0033 \(0)|0
                      (?:\(0\)|0|)\d?[-.\s]?                      # First number (from 1 to 9) preceeded by a non mandatory 0 or (0)
                      (?:\d{2}[-.\s]?){3,4})                      # End of the phone number (3 or 4 times 2 following digits separated or not by .- )
                      (?:$|\D)                                    # Anything but a number or the end of string    
              :return:
              """
              # To be improved to make the 0 mandatory when +33 or 00 is missing. Ex it will match 234558899
              # return re.compile('((?:\+\d{2}|00[-.\s]?\d{2})?[-.\s]?(?:\(0\)|0|)\d?[-.\s]?(?:\d{2}[-.\s]?){3,4})')
              # This version should tka
              return re.compile('((?:\+\d{2}[-.\s]?(?:\(0\)|0)*?[-.\s]?|00[-.\s]?\d{2}[-.\s]?(?:\(0\)|0)*?[-.\s]?|0)\d?[-.\s]?(?:\d{2}[-.\s]?){3,4})(?:$|\D)')
      

      在基于java的应用程序中,您可以使用此依赖项验证电话号码:

          <dependency>
               <groupId>com.googlecode.libphonenumber</groupId>
               <artifactId>libphonenumber</artifactId>
          </dependency>
      

      +33只适用于法国大都市。 我想你也可以加上海外的法国

      /^(?:(?:\+|00|0)((262|692)|(263|693)|508|(5|6)90|(5|6)94|(5|6|7)96|681|687|689))(?:[\s.-]*\d{2}){3,4}$/
      
      如果你考虑了海外领土的数字长度差异,以及一些特定的移动区域代码,正则表达式变得非常混乱…

      我目前在JS中使用的函数:

      export const isValidFrenchPhoneNumber = (phonenumber) => {
          const metropolitanFranceReg = new RegExp(/^(?:(?:\+|00)33|0)\s*[1-9](?:[\s.-]*\d{2}){4}$/)
          const overseasFranceReg = new RegExp(/^(?:(?:\+|00|0)((262|692)|(263|693)|508|(5|6)90|(5|6)94|(5|6|7)96|681|687|689))(?:[\s.-]*\d{2}){3,4}$/)
          // src: https://en.wikipedia.org/wiki/Telephone_numbers_in_France
          // 262, 263 = La Réunion, Mayotte and IO territories ; 508 = Saint-Pierre-et-Miquelon
          // 590 = Guadeloupe, Saint-Martin et Saint-Barthélemy ; 594 = French Guiana (Guyane) ; 596 = Martinique
          // 681 = Wallis-et-Futuna ; 687 = Nouvelle-Calédonie
          // 689 = French Polynesia
          return !(phonenumber.match(metropolitanFranceReg) === null) || !(phonenumber.match(overseasFranceReg) === null)
      }
      

      家庭电话号码和以
      07
      开头的手机呢?
      ^((\+33\s)0)[1-9]\s([0-9][0-9]\s){4})$
      可能会起作用,但它相当复杂,而且是公正的,而且是你的修改(有义务在两个数字之间留出空格),但是
      0033
      是不允许的吗?@Larme是的,感谢信用卡。由于字符串是完全匹配的(
      ^$
      ),我不确定是否需要捕获组。而且,
      +33012345678
      不是一个有效的号码…@ThomasAyoub啊,我对电话号码的工作原理缺乏了解是造成这种情况的原因。将编辑。关于俘虏小组,我非常真实,我只是想反映OP的初衷。我会记下来的。为什么不控制8个数字而不是4乘以2个数字呢?此外,在JavaScript中,如果使用
      new RegExp
      ,为了避免
      SyntaxError:nothing to repeat
      ,您必须在开始时双转义“+”。因此,最后的正则表达式将是
      ^(\+33 | 0 | 0033)[1-9][0-9]{8}$
      。JavaScript示例:
      '+33678787878'。匹配(/^(?:(?:\+| 00)33 | 0)s*[1-9](?:[\s.-]*\d{2}$/4}$/gmi)
      与JSON模式兼容:export const isValidFrenchPhoneNumber = (phonenumber) => { const metropolitanFranceReg = new RegExp(/^(?:(?:\+|00)33|0)\s*[1-9](?:[\s.-]*\d{2}){4}$/) const overseasFranceReg = new RegExp(/^(?:(?:\+|00|0)((262|692)|(263|693)|508|(5|6)90|(5|6)94|(5|6|7)96|681|687|689))(?:[\s.-]*\d{2}){3,4}$/) // src: https://en.wikipedia.org/wiki/Telephone_numbers_in_France // 262, 263 = La Réunion, Mayotte and IO territories ; 508 = Saint-Pierre-et-Miquelon // 590 = Guadeloupe, Saint-Martin et Saint-Barthélemy ; 594 = French Guiana (Guyane) ; 596 = Martinique // 681 = Wallis-et-Futuna ; 687 = Nouvelle-Calédonie // 689 = French Polynesia return !(phonenumber.match(metropolitanFranceReg) === null) || !(phonenumber.match(overseasFranceReg) === null) }