1

文字列 (電話番号) の桁数を 10 に制限する正規表現を書くのを手伝ってくれませんか。問題は、数字グループの間にハイフン ("-") とスペースを使用できること/^\d{10}$/です。

したがって、番号は 1234 123 123、または 123-123-1234 または 1234234123 のいずれかになりますが、10 桁の制限があります。

4

5 に答える 5

3

正規表現だけではなく、preg_replace()数字以外の文字 ( [^\d]) を取り除き、結果の文字列 (数字のみ) の長さが 10 であることを確認するために使用します。

if (strlen(preg_replace('/[^\d]/', '', $number)) !== 10) {
   // invalid
}
于 2012-08-09T13:28:20.263 に答える
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);
?>
于 2012-08-09T13:32:57.320 に答える
0
$phone="92-456-asd-445";
$digits = preg_replace("[^0-9]", "",$phone); //92456445

if (strlen($digits)>10){
    echo "Bye";
}
else{
    echo "Hi";
}
于 2012-08-09T13:35:40.500 に答える
0

strlenで正規表現の値をチェックして、文字列から正しいデータを取得したことを確認します。

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

$str = ' ab cd ';
echo strlen($str); // 7
?>
于 2012-08-09T13:27:20.870 に答える
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!";
}
于 2012-08-09T14:01:06.220 に答える