带有区号的电话#国家代码的正则表达式

时间:2015-10-26 01:08:25

标签: php regex pcre

我需要一个正则表达式来匹配这个国家/地区代码+区号电话#format格式:

1-201

前两个字符始终为1-,后三个字符为201989之间的数字。

我目前([1][\-][0-9]{3})指定1-xyz并限制长度,但如何让最后一组限制这些范围呢?

这将在PHP中使用。

4 个答案:

答案 0 :(得分:2)

使用此正则表达式:

^1\-(2\d[1-9])|([3-8]\d{2})|(9[0-8]\d)$

以下是对三个捕获组/范围的解释:

(2\d[1-9])201299匹配 ([3-8]\d{2})300899匹配 (9[0-8]\d)900989

相匹配

这是一个可以测试此正则表达式的链接:

Regex101

<强>更新

显然,Laravel并不喜欢拥有如此多的嵌套捕获组,但这种简化应该可以满足您的需求:

1-(2\d[1-9]|[3-8]\d{2}|9[0-8]\d)

答案 1 :(得分:1)

我不会使用正则表达式。这将是混乱的,难以维护。

我会做这样的事情:

$strings = array('1-201', '1-298', '1-989', '1-999', '1-200');
foreach($strings as $string) {
    $value = explode('1-', $string);
    if($value[1] >= 201 & $value[1] <= 989) {
        echo 'In range' . $string  . "\n";
    } else {
        echo 'out of range' . $string . "\n";
    }
}

输出:

In range1-201
In range1-298
In range1-989
out of range1-999
out of range1-200

答案 2 :(得分:1)

这应该有效,

proc sql;
  create table test as
   select * from sashelp.class;

  reset outobs=10 nowarn;

  create table test1 as 
   select * from sashelp.class;
quit;

可替换地,

1-(20[1-9]|2[1-9][0-9]|[3-8][0-9][0-9]|9[0-8][0-9])

来源:http://www.regular-expressions.info/numericranges.html

答案 3 :(得分:0)

我想我会像C#中的以下那样做。实验

string tester = "1-201";

Match match = Regex.Match(tester, @"(?<one>1-)(?<Two>[0-9]{3})");

//MessageBox.Show(match.Groups[2].Value);

int x = Convert.ToInt32(match.Groups[2].Value);

if (x <= 201 && x > 989)
{
    //Exclude those captures not necessary.
    //Use the captures within the range.
}