向正则表达式添加否定语句
adding negative statement to regex
我正在尝试使用正则表达式检查是否存在这样的 phone 数字。
(001) 33992292
所以,我用了
if(preg_match("/[0-9\(\)]+/", $row)){
//is phone number
}
但是,问题在于,包含数字的字符串也会被传递,例如 foo134@yahoo.com
,因此我如何评估 phone 数字并排除 @
字符是串在一起?
已更新
/^(\(\d+\))*\s?(\d+\s*)+$/
你错过了开始字符串 ^
符号和结束字符串 $
符号,你的正则表达式还有什么错误
因为 5545()4535 也会通过 match
您需要在正则表达式中使用 anchors,正确的语法是:
if(preg_match('~^\(\d{3}\) *\d{8}$~', $row)) { ... }
Telephone 数字是出了名的容易出错——我指的是程序员。
例如,这些都是 "common" 写 phone 数字的方法:
(001) 33992292
001 33992292
00133992292
001 3399 2292
(001) 3399-2292
更明智的方法是删除所有非数字的内容并检查长度:
$phonenumber = "(001) 33992292";
$phonenumber = preg_replace("/[^0-9,.]/", "", $phonenumber );
if (strlen($phonenumber) == 11) {
// do thing
}
我正在尝试使用正则表达式检查是否存在这样的 phone 数字。
(001) 33992292
所以,我用了
if(preg_match("/[0-9\(\)]+/", $row)){
//is phone number
}
但是,问题在于,包含数字的字符串也会被传递,例如 foo134@yahoo.com
,因此我如何评估 phone 数字并排除 @
字符是串在一起?
已更新
/^(\(\d+\))*\s?(\d+\s*)+$/
你错过了开始字符串 ^
符号和结束字符串 $
符号,你的正则表达式还有什么错误
因为 5545()4535 也会通过 match
您需要在正则表达式中使用 anchors,正确的语法是:
if(preg_match('~^\(\d{3}\) *\d{8}$~', $row)) { ... }
Telephone 数字是出了名的容易出错——我指的是程序员。
例如,这些都是 "common" 写 phone 数字的方法:
(001) 33992292
001 33992292
00133992292
001 3399 2292
(001) 3399-2292
更明智的方法是删除所有非数字的内容并检查长度:
$phonenumber = "(001) 33992292";
$phonenumber = preg_replace("/[^0-9,.]/", "", $phonenumber );
if (strlen($phonenumber) == 11) {
// do thing
}