1

次の条件で文字列を検証するには、正規表現が必要です

  1. 文字列には、スペース + - () / のいずれかの数字が含まれる場合があります。
    文字列にそれ以外のものが含まれている場合、それは無効である必要があります
  2. 文字列に + がある場合、それは先頭にある必要があり、最大で 1 つの + である必要があります。それ以外の場合は無効になります。複数の + がある場合は無効です。
  3. 文字列の長さは 7 ~ 20 文字にする必要があります
  4. これらすべての数字をスペース + - () / にすることは必須ではありません。
    ただし、少なくとも 7 桁を含める必要があります。
4

4 に答える 4

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に保存します。

その後も電話番号を確認することはできません。有効な電話番号の形式は、その有効な番号を意味するものではありません。このため、番号に対してSMSまたは通話が生成され、アクティベーションコードが送信されます。ユーザーがコードを入力すると、電話番号が完全に検証されます。

于 2012-12-25T16:46:28.257 に答える
1

やってみよう ...

preg_match('/^(?=(?:.*\d){7})[+\d\s()\/\-\.][\d\s()\/\-\.]{6,19}$/', $text);

これを分解する:

  • まず、少なくとも7回の数字を必要とする前向きな先読みから始めます。
  • 次に、プラスを含むすべての有効な文字を照合します。
  • 続いて、6〜20回、プラスなしですべての有効な文字を照合します。
于 2012-12-25T16:44:37.970 に答える
1

これは1つの正規表現で実行できます。

/^(?=(?:.*\d){7})[0-9 ()\/+-][0-9 ()\/-]{6,19}$/

しかし、私は個人的に次のようなことをします:

/^[0-9 ()\/+-][0-9 ()\/-]{6,19}$/

次に、数字以外の文字列を削除して、残りの文字列が7以上かどうかを確認します。

于 2012-12-25T16:45:25.677 に答える
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;
}
于 2012-12-25T16:48:49.667 に答える