我尝试将数据验证公式应用于列,检查内容是否为有效的国际电话号码。问题是我无法+1
或+some dial code
,因为它被解释为运营商。所以我正在寻找一个接受所有这些的正则表达式,括号中的拨号代码:
(+1)-234-567-8901
(+61)-234-567-89-01
(+46)-234 5678901
(+1) (234) 56 89 901
(+1) (234) 56-89 901
(+46).234.567.8901
(+1)/234/567/8901
起始正则表达式可以是this一个(我也参考了示例)。
答案 0 :(得分:0)
此正则表达式匹配您提供给我们的所有示例(使用https://fr.functions-online.com/preg_match_all.html测试)
/^\(\+\d+\)[\/\. \-]\(?\d{3}\)?[\/\. \-][\d\- \.\/]{7,11}$/m
^
匹配字符串或新行的开头。
要匹配(+ 1)和(+61):\(\+\d+\)
:必须转义加号和括号,因为它们在正则表达式中具有特殊含义。 \d+
代表任何数字(\d
)字符,加号表示一个或多个(加号可以替换为{1,2}
)
[\/\. \-]
这个匹配点,空格,斜线和连字符恰好一次。
\(?\d{3}\)?
:问号用于可选括号(?= 0或1次)。它预计有三位数。
[\/\. \-]
与第3步相同
[\d\- \.\/]{7,11}
:预计7到11之间的数字,连字符,空格,点或斜线。
$
匹配该行的结尾或字符串的结尾
m
修饰符允许插入符号(^)和美元符号($)组合匹配换行符。如果您希望这些符号仅匹配字符串的开头和结尾,请删除它。
使用斜杠是此正则表达式的分隔符(您可以使用其他字符)。
我必须承认我不喜欢正则表达式的最后一部分,因为不能确保你至少有7位数字。
最好删除所有分隔符(例如使用PHP函数str_replace
)并仅使用此正则表达式处理括号和数字
/(\(\+\d+\))(\(?\d{3}\)?)(\d{3})(\d{4})/m
请注意,在最后一个正则表达式中,我使用4个捕获组来匹配电话号码的四位数部分。此正则表达式保留第一组的括号和加号以及第二组的可选括号。要仅保留数字组,您可以使用此正则表达式:
/\(\+(\d+)\)\(?(\d{3})\)?(\d{3})(\d{4})/m
注意:这些组用于在验证后格式化电话号码。您可能最好以相同的格式将所有电话号码保存在数据库中。
嗯,这里有不同的可能性。
注意:这些正则表达式应与所有正则表达式引擎兼容,但最好指定您使用哪种语言,因为正则表达式引擎与高级/花哨功能的处理方式不同。
例如,javascript不支持后面的内容,而.Net允许对PHP进行更强大的外观控制。
如果您需要更多信息,请与我联系