带或不带扩展名的10位数电话号码的简单正则表达式是什么?


What's a simple RegEx for a 10 digit phone number with or without an extension?

有效的电话号码是10位数字,用破折号分隔,可以包含可选的1-6位扩展名,格式为" x 123456"或" x 123"。以下示例将是有效的数字。

123-456-7890123-456-7890 × 123

以下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})?/时,它坏了。

有谁知道怎么回事吗?

尝试使用这个表达式。( 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