Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 北美编号计划regexp_Php_Regex - Fatal编程技术网

Php 北美编号计划regexp

Php 北美编号计划regexp,php,regex,Php,Regex,验证数字的正则表达式是否正常? 没有“优化”的可能 ^\+1[2-9](0(?!0)|1(?!1)|2(?!2)|3(?!3)|4(?!4)|5(?!5)|6(?!6)|7(?!7)|8(?!8)|9(?!9))[0-9][2-9]((0|[2-9]){2}|1(?!1)[0-9]|(0|[2-9])1)[0-9]{4}$ 您的链接包含比赛信息: NPA(编号平面图区号)-第一位允许的范围:[2-9],第二位和第三位允许的范围[0-9]。当 区号的第二位和第三位数字相同,即 称为易于识别的代码

验证数字的正则表达式是否正常? 没有“优化”的可能

^\+1[2-9](0(?!0)|1(?!1)|2(?!2)|3(?!3)|4(?!4)|5(?!5)|6(?!6)|7(?!7)|8(?!8)|9(?!9))[0-9][2-9]((0|[2-9]){2}|1(?!1)[0-9]|(0|[2-9])1)[0-9]{4}$

您的链接包含比赛信息:

NPA(编号平面图区号)-第一位允许的范围:[2-9],第二位和第三位允许的范围[0-9]。当 区号的第二位和第三位数字相同,即 称为易于识别的代码(ERC)。指定特别顾问 服务;e、 g.,888,免费服务。NANP没有分配 第二位数字为9的区号

NXX(中央办公室)-第一位数字的允许范围为[2-9],第二位和第三位数字的允许范围为[0-9](但第三位数字为[0-9]) 如果第二个数字也是“1”,则数字不能是“1”

xxxx(订户号码)-(0-9)四位数字中的每一位

如果要在开头省略
+1
,则可以使用以下内容匹配10位数字。他们唯一要阻止的是一个包含一些3位本地代码的号码,如
911
611
411
,等等。因此,为了实现这一点,我们要确保该号码的中央办公室部分第一位之后的下两位数字不是带有负面展望的
(?!11)

此模式适用于大多数字符串

$pattern = '~^\(?([2-9][0-9]{2})\)?[-. ]?([2-9](?!11)[0-9]{2})[-. ]?([0-9]{4})$~';

$numbers = array(
'(800) 555 1212',
'(800) 911 1212',
'(800) 910 1212',
'(800) 901 1212',
'(100) 455 1212',
'(800) 155 1212',
'555 555 1212',
'813.555.1212',
);



foreach($numbers as $number){
    if(preg_match($pattern,$number)){
      echo "$number is valid.\n";   
    } else {
      echo "$number is invalid. \n";    
    }
}
输出

(800) 555 1212 is valid.
(800) 911 1212 is invalid. 
(800) 910 1212 is valid.
(800) 901 1212 is valid.
(100) 455 1212 is invalid. 
(800) 155 1212 is invalid. 
555 555 1212 is valid.
813.555.1212 is valid.

我很容易想到一些可读性优化,比如将数字拆分为XXX-YYY-ZZZZ格式,并分别检查每个块。重复?在大多数版本中,
(0(?!0)| 1(?!1)|…)
部分可以缩短为
(\d)(?!\1)
。正则表达式使用的是什么编程语言?由于某种原因,此字符串中的负前瞻性不起作用。检查一下,谢谢。这正是我所需要的。消极前瞻不起作用,因为最初我的分隔符是
在否定中使用。