3

PHPで電話番号を検証する方法を探しています。電話番号は、存在するさまざまな形式のいずれかで入力できます。それが役に立ったら、問題のドメインを米国の電話番号(または国際番号-どちらか一方、両方ではない)に制限することができます。

filter_var()電話番号に相当するカスタムフィルターstrtotime()、または単なるバニラ解析ライブラリを探してみましたが、あまりうまくいきませんでした。

必要に応じて、カスタムソリューションを設計できますが、A)鉱山は確かにそれほど堅牢ではなく、B)車輪の再発明は好きではないため、すでに存在する場合は避けたいと思います。

4

3 に答える 3

1

正規表現を使用します。以下は、3334445555、333.444.5555、333-444-5555、333 444 5555、(333) 444 5555、およびそれらのすべての組み合わせなどに一致します。次に、それらすべてを (333) 444-5555 に置き換えます

preg_replace('\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})', '(\1) \2-\3', $text);
于 2012-06-11T13:18:10.630 に答える
0

電話番号の「解析」は、ネイティブ PHP で行うべきことではありません。

「有効な」電話番号を自分で指定する必要があります。これは、指定された形式または正規表現に対して入力を検証することによって行う必要があります。

PHP が「有効な電話番号」を知る方法はありません。

于 2012-06-11T13:20:00.443 に答える
0

米国のすべての電話番号形式を認識しているわけではありませんが、これは拡張できる一般的な考え方だと思います。

function validate_phone($phone) {
  // replace everything except numbers
  $phone = preg_replace('~[^\dx]~', '', $phone);

  return preg_match('~^\d{11}(x\d{4})?$~', $phone);
}


// $phone = 12345678901;
$phone = '1-234-567-8901x1234';
$valid = filter_var($phone, FILTER_CALLBACK, array(
  'options' => 'validate_phone'
));

if ($valid) {
  echo "It's valid!";
};

このコードは、11 桁の数字 (内部にダッシュ、スペース、ドットを含む) と、x2134 サフィックスを含む拡張形式をサポートしています。

于 2012-06-11T13:26:44.710 に答える