对于包含或不包含扩展名的10位数电话号码,简单的RegEx是什么?

时间:2014-06-02 15:57:44

标签: php regex

有效的电话号码是10位数字,由短划线分隔,并且可能包含可选的1-6位数字分机,格式为“x 123456”或“x 123”。以下示例将是有效数字。

123-456-7890 123-456-7890 x 123 123-456-7890 x 1234

以下RegEx适用于10位数的电话号码:/[0-9]{3}-[0-9]{3}-[0-9]{4}/,但是当我尝试添加/[0-9]{3}-[0-9]{3}-[0-9]{4}( x [0-9]{1,6})?/这样的可选扩展程序时,它已损坏。

有谁知道什么是错的?

1 个答案:

答案 0 :(得分:0)

尝试使用此表达式。 ( x \d{1,6})?表示括号中的0或1是什么。

我们也在告诉它使用^$查看字符串的开头和结尾,而不只是查看字符串中的任何位置。

/^\d{3}-\d{3}-\d{4}( x \d{1,6})?$/

以下是一个示例用法:

<?php

$tests = array(
    "123-456-789",
    "123-456-7890",
    "123-456-7890 x 123",
    "123-456-7890 x 1234",
    "123-456-7890 x 1234654654"
);

foreach($tests as $test){
    if(preg_match("/^\d{3}-\d{3}-\d{4}( x \d{1,6})?$/", $test)){
        echo "<b>$test:</b> valid<br />";
    }else{
        echo "<b>$test:</b> invalid<br />";
    }
}

这是输出:

123-456-789:               invalid
123-456-7890:              valid
123-456-7890 x 123:        valid
123-456-7890 x 1234:       valid
123-456-7890 x 1234654654: invalid