匹配所有德国和奥地利手机 phone 号码的正则表达式
Regex that matches all German and Austrian mobile phone numbers
我需要一个 Python 正则表达式来匹配来自德国和奥地利的手机 phone 号码。
为了做到这一点,我们首先要了解 phone 数字的结构:
- 手机号码可以在开头写国家区号。但是,此代码是可选的!
- 如果我们使用国家代码,中继前缀是多余的!
- 前缀由中继前缀和公司代码组成
- 前缀后跟一个单独且唯一的编号,分别为 7 位或 8 位数字。
德语前缀列表:
- 0151, 0160, 0170, 0171, 0175, 0152, 0162, 0172, 0173, 0174, 0155, 0157, 0159, 0163, 0176, 0177, 0178, 0179, 0164, 0169[ 0168=4 ]
奥地利语前缀列表:
- 0664、0680、0688、0681、0699、0664、0667、0650、0678、0650、0677、0676、0660、0699、0690、0665、0686、0670
现在我们知道构建正则表达式的所有规则,我们必须考虑,人类有时会以非常奇怪的方式写数字,其中包含多个空格,/
或 ()
。例如:
- 0176 98 600 18 9
- +49 17698600189
- +(49) 17698600189
- 0176/98600189
- 0176 / 98600189
- 更多的写法
我正在寻找可以匹配所有澳大利亚和德国手机号码的 Python 正则表达式。
我目前的情况是这样的:
^(?:\+4[39]|004[39]|0|\+\(49\)|\(\+49\))\s?(?=(?:[^\d\n]*\d){10,11}(?!\d))(\()?[19][1567]\d{1,2}(?(1)\))\s?\d(?:[ /-]?\d)+
你可以使用
(?x)^ # Free spacing mode on and start of string
(?: # A container group:
(\+49|0049|\+\(49\)|\(\+49\))? [ ()\/-]* # German: country code
(?(1)|0)1(?:5[12579]|6[023489]|7[0-9]) # trunk prefix and company code
| # or
(\+43|0043|\+\(43\)|\(\+43\))? [ ()\/-]* # Austrian: country code
(?(2)|0)6(?:64|(?:50|6[0457]|7[0678]|8[0168]|9[09])) # trunk prefix and company code
)
[ ()\/-]* # zero or more spaces, parens, / and -
\d(?:[ \/-]*\d){6,7} # a digit and then six or seven occurrences of space, / or - and a digit
\s* # zero or more whites
$ # end of string
参见regex demo。
模式的单行版本是
^(?:(\+49|0049|\+\(49\)|\(\+49\))?[ ()\/-]*(?(1)|0)1(?:5[12579]|6[023489]|7[0-9])|(\+43|0043|\+\(43\)|\(\+43\))?[ ()\/-]*(?(2)|0)6(?:64|(?:50|6[0457]|7[0678]|8[0168]|9[09])))[ ()\/-]*\d(?:[ \/-]*\d){6,7}\s*$
参见 this demo。
如何创建公司代码正则表达式
- 转到
- 单击运行最后一个代码片段
答案底部的运行代码片段按钮
- 如果您愿意,可以调整输入框的大小
- 获取支持的号码列表,以逗号或换行符分隔并将其粘贴到字段中
- 单击生成按钮,然后抓取将出现在下面的图案。
我需要一个 Python 正则表达式来匹配来自德国和奥地利的手机 phone 号码。
为了做到这一点,我们首先要了解 phone 数字的结构:
- 手机号码可以在开头写国家区号。但是,此代码是可选的!
- 如果我们使用国家代码,中继前缀是多余的!
- 前缀由中继前缀和公司代码组成
- 前缀后跟一个单独且唯一的编号,分别为 7 位或 8 位数字。
德语前缀列表:
- 0151, 0160, 0170, 0171, 0175, 0152, 0162, 0172, 0173, 0174, 0155, 0157, 0159, 0163, 0176, 0177, 0178, 0179, 0164, 0169[ 0168=4 ]
奥地利语前缀列表:
- 0664、0680、0688、0681、0699、0664、0667、0650、0678、0650、0677、0676、0660、0699、0690、0665、0686、0670
现在我们知道构建正则表达式的所有规则,我们必须考虑,人类有时会以非常奇怪的方式写数字,其中包含多个空格,/
或 ()
。例如:
- 0176 98 600 18 9
- +49 17698600189
- +(49) 17698600189
- 0176/98600189
- 0176 / 98600189
- 更多的写法
我正在寻找可以匹配所有澳大利亚和德国手机号码的 Python 正则表达式。
我目前的情况是这样的:
^(?:\+4[39]|004[39]|0|\+\(49\)|\(\+49\))\s?(?=(?:[^\d\n]*\d){10,11}(?!\d))(\()?[19][1567]\d{1,2}(?(1)\))\s?\d(?:[ /-]?\d)+
你可以使用
(?x)^ # Free spacing mode on and start of string
(?: # A container group:
(\+49|0049|\+\(49\)|\(\+49\))? [ ()\/-]* # German: country code
(?(1)|0)1(?:5[12579]|6[023489]|7[0-9]) # trunk prefix and company code
| # or
(\+43|0043|\+\(43\)|\(\+43\))? [ ()\/-]* # Austrian: country code
(?(2)|0)6(?:64|(?:50|6[0457]|7[0678]|8[0168]|9[09])) # trunk prefix and company code
)
[ ()\/-]* # zero or more spaces, parens, / and -
\d(?:[ \/-]*\d){6,7} # a digit and then six or seven occurrences of space, / or - and a digit
\s* # zero or more whites
$ # end of string
参见regex demo。
模式的单行版本是
^(?:(\+49|0049|\+\(49\)|\(\+49\))?[ ()\/-]*(?(1)|0)1(?:5[12579]|6[023489]|7[0-9])|(\+43|0043|\+\(43\)|\(\+43\))?[ ()\/-]*(?(2)|0)6(?:64|(?:50|6[0457]|7[0678]|8[0168]|9[09])))[ ()\/-]*\d(?:[ \/-]*\d){6,7}\s*$
参见 this demo。
如何创建公司代码正则表达式
- 转到
- 单击运行最后一个代码片段 答案底部的运行代码片段按钮
- 如果您愿意,可以调整输入框的大小
- 获取支持的号码列表,以逗号或换行符分隔并将其粘贴到字段中
- 单击生成按钮,然后抓取将出现在下面的图案。