我有这个功能来检查我的电话号码:
function isValid( $what, $data ) {
switch( $what ) {
// validate a phone number
case 'phone_number':
$pattern = "/^[0-9-+]+$/";
break;
default:
return false;
break;
}
return preg_match($pattern, $data) ? true : false;
}
我想更改该正则表达式以接受以下内容:)
(
字符,如(800)和space
。
例如,这个数字将通过验证,现在没有通过:
+1(201)223-3213
答案 0 :(得分:7)
让我们一步一步地构建正则表达式。还要考虑在匹配之前修剪空格。
\+?
[0-9]+
的部分之前的一个或多个数字。如果数字可以直接从括号中的组开始,则可能需要写[0-9]*
(\[0-9]+\)?
。假设只允许一个这样的组[0-9-]*
最后一个字符必须是数字[0-9]
,此处不允许使用连字符
^\+?[0-9]+(\([0-9]+\))?[0-9-]*[0-9]$
查看结果here。修剪空间看起来像$trimmed = str_replace(' ', '', $pattern);
。
答案 1 :(得分:3)
答案 2 :(得分:1)
'/\(?\b[0-9]{3}\)?[-. ]?[0-9]{3,5}[-. ]?[0-9]{4,8}\b/'
答案 3 :(得分:1)
由于您似乎正在使用此进行验证,因此可以使用str_replace('[\s\+\-\(\)]', '', $data)
来获取应该(如果电话号码有效)仅包含数字的字符串。然后,您可以通过运行preg_match('\d{11}', $data)
轻松测试此假设({11}
表示11位,如果允许范围,则使用min,max,如{min,max}
,例如\d{10,11}
)
值得注意的是,这并不像Lorlin的回答那么彻底,因为你忽略了括号+
或-
s的任何无效使用。您可能希望使用两者的组合,或者最适合您需要的任何组合。