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)
}