0

我写了一个用于验证电话号码的正则表达式,但是我不知道有什么问题。必需的:

  1. 前导“011”国家代码,可以在括号中或不带括号
  2. 1-3位国家代码
  3. 2位城市代码
  4. ddd-dddd本地电话号码形式的代码(3 位破折号,然后 4 位数字)

组的合法分隔符是破折号 (-) 和空格。
例如:(011) 23 55 345-9878011-3-33-987-6543

这是我尝试过的:

if($_ =~ /^:?([011]:?){1}[ -]+[0-9]\d{2}+[ -]+[0-9]\d{2}+[0-9]\d{3}-[0-9]\d{4}/){
    say "Line5 Good: ", $currLine;
} else {
    say "Error in Line 5: Not a valid phone number ";
}
4

2 回答 2

1

这个正则表达式测试正常 - 随意调味:

(\(011\)|^011)([ |-])\d?\d?\d([ |-])\d{2}([ |-])\d{3}([ |-])\d{4}

(\(011\)|^011)确保在数字的开头只接受 (011) 或 011,因此不必担心所有其他排列,如 )011、011) 等。其余的会处理您所需的格式。我可能有点过火了|或者,但我只是发现组更容易阅读......

你可以在这里自己测试一下:http: //gskinner.com/RegExr/? 36s51

为罗伯托·纳瓦罗干杯,让我开始访问 gskinner.com。

于 2013-10-23T06:10:03.903 回答
0

这应该是正则表达式:\(?011\)?[ -]\d?\d?\d?[ -]\d{2}[ -]\d{3}[ -]\d{4}

在此处验证:http: //gskinner.com/RegExr/但我没有找到向您发送链接的方法。

屏幕截图 :) 顺便说一句,蓝色突出显示表示匹配,因此在这种情况下,您的所有条件都匹配。屏幕截图中的错字,应该是“匹配更多 3 个国家/地区代码失败”

在此处输入图像描述

于 2013-10-23T04:35:13.217 回答