什么是正则表达式匹配以下10位数字?

时间:2011-03-12 01:17:08

标签: php preg-match

正则表达式匹配以下10位数字是什么:

0108889999 //can contain nothing except 10 digits 
011 8889999 //can contain a whitespace at that place
012 888 9999 //can contain two whitespaces like that
013-8889999 // can contain one dash
014-888-9999 // can contain two dashes

4 个答案:

答案 0 :(得分:5)

如果你只是在寻找正则表达式,请试试这个:

^(\d{3}(\s|\-)?){2}\d{4}$

稍微清楚一点:

^ # start at the beginning of the line (or input)
(
    \d{3} # find three digits
    (
        \s # followed by a space
        | # OR
        \- # a hyphen
    )? # neither of which might actually be there
){2} # do this twice,
\d{4} # then find four more digits
$ # finish at the end of the line (or input)

编辑:哎呀!以上是正确的,但它也太宽松了。它会匹配01088899996(一个太多的字符)之类的东西,因为它喜欢它们中的第一个(或最后一个)10个。现在它更加严格(我添加了^$)。

答案 1 :(得分:0)

我假设你想要一个正则表达式匹配任何这些例子:

if (preg_match('/(\d{3})[ \-]?(\d{3})[ \-]?(\d{4})/', $value, $matches)) {
    $number = $matches[1] . $matches[2] . $matches[3];
}

答案 2 :(得分:0)

preg_match('/\d{3}[\s-]?\d{3}[\s-]?\d{4}/', $string);

0108889999   // true
011 8889999  // true
012 888 9999 // true
013-8889999  // true
014-888-9999 // true

匹配特定部分:

preg_match('/(\d{3})[\s-]?(\d{3})[\s-]?(\d{4}/)', $string, $matches);

echo $matches[1]; // first 3 numbers
echo $matches[2]; // next 3 numbers
echo $matches[3]; // next 4 numbers

答案 3 :(得分:0)

您可以尝试这种模式。它满足您的要求。

[0-9] {3} [ - \ s]的[0-9] {3}?[ - \ S] [0-9] {4}

此外,您可以通过附加[\ s。,] + :(电话号码以空格,点或逗号结尾)为最后一个字符添加更多条件

[0-9] {3} [ - \ S] [0-9] {3} [ - \ S] [0-9] {4} [\ S,] +