你能帮我写一个正则表达式来将字符串(电话号码)中的数字限制为 10。问题是我们允许在数字组之间使用连字符(“-”)和空格,所以我不能只使用/^\d{10}$/
.
所以号码可以是 1234 123 123,或 123-123-1234 或 1234234123,仅限 10 位数字。
而不是单独的正则表达式,用于preg_replace()
去除非数字字符 ( [^\d]
) 并验证结果字符串(仅限数字)长度是否为 10:
if (strlen(preg_replace('/[^\d]/', '', $number)) !== 10) {
// invalid
}
使用strlen检查正则表达式的值,以确保从字符串中获得正确的数据:
<?php
$str = 'abcdef';
echo strlen($str); // 6
$str = ' ab cd ';
echo strlen($str); // 7
?>
或者不使用正则表达式:
<?php
$v = "123-123-1234";
$items = array();
for ($i = 0; $i < strlen($v); $i++) {
if ($v[$i] <= '9' && $v[$i] >= '0') {
$items[] = $v[$i];
if (count($items) == 10)
break;
}
}
print_r($items);
?>
$phone="92-456-asd-445";
$digits = preg_replace("[^0-9]", "",$phone); //92456445
if (strlen($digits)>10){
echo "Bye";
}
else{
echo "Hi";
}
“所以号码可以是 1234 123 123,或 123-123-1234 或 1234234123,仅限 10 位数字。”
在这个例子中,“44”部分是突破限制;
$i = 0;
$s = "1234 567 890-44";
preg_match_all("/(\d+|-+| +)/", $s, $ms);
foreach ($ms[0] as $m) {
if (is_numeric($m)) {
$i += strlen($m);
}
}
echo $i ."\n";
if ($i > 10) {
echo "limit exceed!";
}