使用REGEXMATCH验证国际电话号码

时间:2015-10-20 14:04:16

标签: regex google-sheets

我尝试将数据验证公式应用于列,检查内容是否为有效的国际电话号码。问题是我无法+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一个(我也参考了示例)。

1 个答案:

答案 0 :(得分:0)

此正则表达式匹配您提供给我们的所有示例(使用https://fr.functions-online.com/preg_match_all.html测试)

/^\(\+\d+\)[\/\. \-]\(?\d{3}\)?[\/\. \-][\d\- \.\/]{7,11}$/m
  1. ^匹配字符串或新行的开头。

  2. 要匹配(+ 1)和(+61)\(\+\d+\):必须转义加号和括号,因为它们在正则表达式中具有特殊含义。 \d+代表任何数字(\d)字符,加号表示一个或多个(加号可以替换为{1,2}

  3. [\/\. \-]这个匹配点,空格,斜线和连字符恰好一次。

  4. \(?\d{3}\)?:问号用于可选括号(?= 0或1次)。它预计有三位数。

  5. [\/\. \-]与第3步相同

  6. [\d\- \.\/]{7,11}:预计7到11之间的数字,连字符,空格,点或斜线。

  7. $匹配该行的结尾或字符串的结尾

  8. m修饰符允许插入符号(^)和美元符号($)组合匹配换行符。如果您希望这些符号仅匹配字符串的开头和结尾,请删除它。

  9. 使用斜杠是此正则表达式的分隔符(您可以使用其他字符)。

  10. 我必须承认我不喜欢正则表达式的最后一部分,因为不能确保你至少有7位数字。

    最好删除所有分隔符(例如使用PHP函数str_replace)并仅使用此正则表达式处理括号和数字

    /(\(\+\d+\))(\(?\d{3}\)?)(\d{3})(\d{4})/m
    

    请注意,在最后一个正则表达式中,我使用4个捕获组来匹配电话号码的四位数部分。此正则表达式保留第一组的括号和加号以及第二组的可选括号。要仅保留数字组,您可以使用此正则表达式:

    /\(\+(\d+)\)\(?(\d{3})\)?(\d{3})(\d{4})/m
    

    注意:这些组用于在验证后格式化电话号码。您可能最好以相同的格式将所有电话号码保存在数据库中。

    嗯,这里有不同的可能性。

    注意:这些正则表达式应与所有正则表达式引擎兼容,但最好指定您使用哪种语言,因为正则表达式引擎与高级/花哨功能的处理方式不同。

    例如,javascript不支持后面的内容,而.Net允许对PHP进行更强大的外观控制。

    如果您需要更多信息,请与我联系