我需要一个正则表达式来验证具有以下条件的字符串
答案 0 :(得分:2)
我认为您正在使用E.164格式验证电话号码。电话号码可以包含许多其他格式。它也可以包含.
。数字中的多个空格并不罕见。因此,最好将所有数字格式化为通用格式并将该格式存储在db中。如果这种常见格式错误,您可能会抛出错误。
我验证了这样的电话号码。
function validate_phone($phone){
// replace anything non-digit and add + at beginning
$e164 = "+". preg_replace('/\D+/', '', $phone);
// check validity by length;
return (strlen($e164)>6 && strlen($e164)<21);
}
这里我将$e164
存储在Db中,如果它有效。
即便如此,您也无法验证电话号码。有效的电话号码格式并不意味着它是有效的号码。为此,根据号码生成短信或呼叫,并发送激活码。一旦用户输入代码,电话号码就完全有效。
答案 1 :(得分:1)
我们试试......
preg_match('/^(?=(?:.*\d){7})[+\d\s()\/\-\.][\d\s()\/\-\.]{6,19}$/', $text);
打破这个局面:
答案 2 :(得分:1)
您可以在一个正则表达式中执行此操作:
/^(?=(?:.*\d){7})[0-9 ()\/+-][0-9 ()\/-]{6,19}$/
但是我个人会这样做:
/^[0-9 ()\/+-][0-9 ()\/-]{6,19}$/
然后剥离任何非数字,看看剩余的字符串是否为7或更长。
答案 3 :(得分:0)
更简洁一点:
^\+?(?=(.*\d){7})[()/\d-]{7,19}$
'当然,你为什么要使用正则表达式?
function is_valid($string) {
$digits = 0;
$length = strlen($string);
if($length < 7 || $length > 20) {
return false;
}
for($i = 0; $i < $length; $i++) {
if(ctype_digit($string[$i])) {
$digits++;
} elseif(strpos('+-() ', $string[$i]) === false && ($string[$i] !== '+' || $i !== 0)) {
return false;
}
}
return $digits >= 7;
}