【问题标题】:Need a regular expression for an Irish phone number需要爱尔兰电话号码的正则表达式
【发布时间】:2011-02-26 19:06:49
【问题描述】:

我需要验证一个爱尔兰电话号码,但我不想让它对用户太不友好,很多人习惯用括号括住他们的区号,后跟 5 到 7 位数字作为电话号码,有些人习惯于在那里写电话号码在区号或移动运营商之间添加空格。

爱尔兰固定电话号码的格式是 1 到 4 位的区号和 5 到 8 位的数字。

例如

(021) 9876543  
(01)9876543  
01 9876543  
(0402)39385

我正在寻找 Javascript/PHP 的正则表达式。

【问题讨论】:

  • “1 到 4 位数字的区号”。不,最短的区号是两位数。此外,所有区号均以0 开头,但以1 开头的特殊代码除外。 (1800 免费电话、1890 本地电话、1580 昂贵等)
  • TRIG,从技术上讲,你是对的。但是对于都柏林 (01),有些人习惯于简单地写 (1) 与科克人写的 (21) 相同,通常是因为他们在第一个 +353 1 1234567 中添加了国家代码 我不想混淆这些人比我需要的更远。干杯。

标签: javascript php regex phone-number


【解决方案1】:

可能值得一看 Validate_IE 类 - 它包含一个 phoneNumber 函数,可以处理各种可能的爱尔兰电话号码(带/不带区号、手机号码、手机短代码等)。

此外,如果您使用的是爱尔兰数据,它还有一系列额外的方法,有朝一日可能会派上用场,用于验证从爱尔兰银行账户到驾驶执照号码等所有内容,值得一看!

【讨论】:

    【解决方案2】:

    这可能有效。它应该考虑到电话号码中任何地方出现的空格。

    preg_match('|^\s*\(?\s*\d{1,4}\s*\)?\s*[\d\s]{5,10}\s*$|', $phone);
    

    人们有时会用空格将电话号码部分分成两部分。

    更新:如果您希望同时验证电话号码和修剪空格,您可以这样做:

    if (preg_match('|^\s*(\(?\s*\d{1,4}\s*\)?\s*[\d\s]{5,10})\s*$|', $phone, $m))
    {
        echo $m[1];
    }
    

    【讨论】:

    • 太棒了。几乎完美。无论如何要修剪开头和结尾的空间吗?
    • 要么在匹配之前使用 trim($phone),要么在匹配字符串的第一个/最后一个 \s* 之后和之前放置 ( and ),然后读取第一个匹配的字符串。我会更新我的答案。
    • 谢谢 mr.b,我已经在服务器端进行了修剪,我只想在客户端也这样做,我在 jQuery 中使用 $.trim 但我也想要它如果有空格,则失败。虽然,再想一想,这似乎有点矫枉过正。
    • 此答案不包括包含国际拨号代码(例如“00353 049 854 4070”)的电话号码。
    • @TomHalley 是的,但是,这不是 OP 的要求之一。这是一个修改后的正则表达式:^\s*(?:(?:00|\+)[\d]{1,3}\s*)?\(?\s*\d{1,4}\s*\)?\s*[\d\s]{5,10}\s*$。它将匹配 +xyz 或 00xyz,其中 xyz 是 1-3 位长的国家/地区代码,因此最终它将匹配 00353 049 854 4070 和 049 854 4070 和 (049) 854 4070 等。
    【解决方案3】:

    如果是我,我会去掉空格和括号,然后验证它是否在最小和最大长度之间。

    【讨论】:

      【解决方案4】:

      试试这个:

      http://regexlib.com/REDetails.aspx?regexp_id=2485

      不包括区号的修改版本:

      \d{3}\s\d{4}
      

      【讨论】:

      • 嗨,西蒙,为回复欢呼,我不想要国家代码,因为我正在单独处理它,使用 /^\(0\)\s\d\s\d{3}\s\d{4}$/ 似乎没有按我想要的方式工作
      猜你喜欢
      • 1970-01-01
      • 2016-01-12
      • 1970-01-01
      • 2012-04-08
      • 2014-02-16
      • 2017-09-23
      • 2014-02-15
      相关资源
      最近更新 更多