1

我有一个电话号码字段设置为使用 preg_match 进行验证:

function ValidPhone($phone) {
    return preg_match('/^[0-9]{3}-[0-9]{3}-[0-9]{4}$/', trim($phone));
}

这可确保以 xxx-xxx-xxxx 格式输入电话号码并且它是数字的。

我对正则表达式不是很熟悉;谁能告诉我如何扩展它以允许多种格式?即 xxx xxx xxxx 或 xxx.xxx.xxxx 或 (xxx) xxx-xxxx

谢谢。

4

3 回答 3

5

我认为最简单的解决方案是先去掉所有不是数字的东西:

function ValidatePhone($phone) {
    $phone = preg_replace('/\D+/', '', $phone);
    return strlen($phone) == 10;
}

由于您正在验证格式而不是内容,因此应该这样做:

function ValidatePhone($phone) {
    $patterns = array(
        '\d{3}([-\. ])\d{3}\g{-1}\d{4}',
        '\(\d{3}\) \d{3}-\d{4}'
        );

    $phone = trim($phone);

    foreach ($patterns as $pattern) {
        if (preg_match('/^' . $pattern . '$/', $phone))
            return true;
    }

    return false;                                                                                                                   
}
于 2012-08-23T16:59:17.937 回答
0

对于美国号码:

\(?[2-9]\d\d)?[ -\.]?[2-9]\d\d[ -\.]?\d{4} 
于 2012-08-23T17:02:46.943 回答
0
(\d{3} \d{3} \w{4})|(\d{3}-\d{3}\-\d{4})|(\d{3}\.\d{3}\.\d{4})

\d:一位数字 [0-9]

\d{3}:三个一位数

|:逻辑或

于 2012-08-23T21:24:50.930 回答