限制表达式中的多个数字

时间:2012-08-09 13:25:54

标签: php regex

请你帮我写一个正则表达式,将字符串中的数字数量限制为10(电话号码)。问题是我们允许连字符(“ - ”)和数字组之间的空格,所以我不能只使用/^\d{10}$/

所以号码可以是1234 123 123,或123-123-1234或1234234123,仅限10位数。

5 个答案:

答案 0 :(得分:3)

使用preg_replace()删除非数字字符([^\d])并验证结果字符串(仅限数字)长度为10,而不是单独使用正则表达式:

if (strlen(preg_replace('/[^\d]/', '', $number)) !== 10) {
   // invalid
}

答案 1 :(得分:0)

使用strlen检查正则表达式的值,以确保从字符串中获取正确的数据:

<?php
$str = 'abcdef';
echo strlen($str); // 6

$str = ' ab cd ';
echo strlen($str); // 7
?>

答案 2 :(得分:0)

或者不使用正则表达式:

<?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);
?>

答案 3 :(得分:0)

$phone="92-456-asd-445";
$digits = preg_replace("[^0-9]", "",$phone); //92456445

if (strlen($digits)>10){
    echo "Bye";
}
else{
    echo "Hi";
}

答案 4 :(得分:0)

“所以号码可以是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!";
}