【问题标题】:RegEx for swiss phone number瑞士电话号码的正则表达式
【发布时间】:2014-05-25 19:25:01
【问题描述】:

我需要一个正则表达式来验证瑞士电话号码(使用 Laravel,一个 php 框架),该号码必须符合这种格式:

+41 11 111 11 11

“+41”部分必须完全如此,而其余部分 (11 111 11 11) 可以是 1 到 9 之间的任何数字。

调用 RegEx 的函数如下所示:

    $regex = "thisIsWhereINeedYourHelp";

    if (preg_match($regex, $value)) {
               return true;
            } 
    return true;

感谢您的帮助!

【问题讨论】:

标签: php regex validation laravel-4 phone-number


【解决方案1】:

你可以这样做:

(\+41)\s(\d{2})\s(\d{3})\s(\d{2})\s(\d{2})

演示:http://regex101.com/r/hJ9oY0

【讨论】:

  • 如果要匹配 +41 00 111 22 33+41001112233,请将每个 \s 更改为 \s?
  • 是的,理想情况下,您希望能够接受带/不带空格或连字符分隔的数字
  • @sshashank124 连字符不是瑞士电话领域的东西
【解决方案2】:

这是一个适用于瑞士电话号码的正则表达式:

^(\+?)(\d{2,4})(\s?)(\-?)((\(0\))?)(\s?)(\d{2})(\s?)(\-?)(\d{3})(\s?)(\-?)(\d{2})(\s?)(\-?)(\d{2})

【讨论】:

  • 在瑞士,我们从不使用连字符写电话号码,因此您实际上可以省略此正则表达式中的每个 (\-?)
【解决方案3】:

我先稍微清理一下字符串(避免无用的匹配):

// input string cleanup
$input = preg_replace('/[^0-9+\(\)-]/', '', $input);

我比一个瑞士号码匹配:

// swiss telephone validation +41 (0)xx xxx xxxx
if(preg_match('/^(\+41|0041|0){1}(\(0\))?[0-9]{9}$/',$input))
        $result = "match: CH";
else    $result = "no match";

这应该匹配所有瑞士格式并且相当可靠

【讨论】:

    【解决方案4】:

    您可以使用Laravel-Phone 包进行验证、格式化和更多功能。

    在您的情况下,您可以像这样指定您的国家/地区:

    'phone' => 'required|phone:CH'
    

    CH = 瑞士 (Confoederatio Helvetica)

    【讨论】:

      【解决方案5】:

      这是我使用的模式:

      /(\b(0041|0)|\B\+41)(\s?\(0\))?(\s)?[1-9]{2}(\s)?[0-9]{3}(\s)?[0-9]{2}(\s)?[0-9]{2}\b/
      

      它匹配以下所有内容:

      +41 11 111 11 11
      +41 (0) 11 111 11 11
      +41111111111
      +41(0)111111111
      00411111111
      0041 11 111 11 11
      0041 (0) 11 111 11 11
      011 111 11 11
      0111111111
      

      任何空格都可以省略,它会检查单词和非单词的边界。

      【讨论】:

      • 如果您只想匹配带有国家前缀的号码,以 0041 或 +41 开头 /(\b(0041)|\B\+41)(\s?\(0\))?(\s)?[1-9]{2}(\s)?[0-9]{3}(\s)?[0-9]{2}(\s)?[0-9]{2}\b/
      猜你喜欢
      • 1970-01-01
      • 2013-10-30
      • 2017-09-23
      • 2014-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多