X、y、zはすべて数字です。文字列の長さが14文字かどうかを確認する方法を知っているだけでなく、各文字を繰り返して、文字が[0-9]と一致するかどうかを確認したくありません。
より賢い方法はありますか?正規表現のplsはありません....私はそれが怖いです。
X、y、zはすべて数字です。文字列の長さが14文字かどうかを確認する方法を知っているだけでなく、各文字を繰り返して、文字が[0-9]と一致するかどうかを確認したくありません。
より賢い方法はありますか?正規表現のplsはありません....私はそれが怖いです。
あなたが使用することができますsscanf
:
例:
print_r( sscanf("+123-1234-1234", "+%3d-%4d-%4d") );
出力します:
Array ( [0] => 123 [1] => 1234 [2] => 1234 )
ただし、これは入力文字列の有効性を保証するものではありません。+ 1-1-1のような文字列は、3つの値すべてが1の配列になります。したがって、3つの配列値を個別に検証する必要があります。
サポートされている形式のリストを参照してください(ただし、PHPがこれらすべてをサポートしているかどうかはわかりません)。
しかし、真剣に、^\+\d{3}-\d{4}-\d{4}$
怖いものではありません。かなり簡単です。正規表現の土地にはもっと悪いことがあります。
正規表現を恐れる必要はありません。正規表現は、次のものの単なるコレクションです。
たとえば、記号\d
は数字のセット ( ) の任意の文字と一致します0-9
。演算子{n}
は、前のシンボルn
時間の繰り返しを示します。
この知識を武器に、問題をフレーズで定義してみましょう。
パート 1:プラスの後に 3 桁の数字を一致させる
正規表現に変換すると、これは次のとおりです。\+\d{3}
パート 2:ハイフンの後に 4 桁の数字を一致させる
正規表現に変換すると、これは次のとおりです。-\d{4}
パート 3:別のハイフンとそれに続く 4 桁の数字を一致させる
正規表現に変換すると、これは次のとおりです。-\d{4}
全体的に
すべてをまとめると、次のようになります。
\+\d{3}-\d{4}-\d{4}
各キャラクターを見る方法はありません。正規表現でさえ(舞台裏で)それをしなければならないでしょう。また、正規表現は何も恐れることはありません。実際、特に次のような場合は、実際にはかなり簡単です。
$ok = preg_match('/^\+\d{3}-\d{4}-\d{4}$/', $text);
実際の正規表現について:
/
ここでは区切り文字として使用されますが、修飾子(大文字と小文字を区別しないなど)を追加するまではそれほど重要ではありません。^
テキスト(または行。フラグによっては)の先頭に一致します。\+
+
キャラクターです。+
「前の式に少なくとも1回一致する」ことを意味するため、エスケープは重要です。\d
任意の数(1文字)を表します。{n}
前の式(ここで\d
は:)を正確に繰り返す必要がありn
ます。$
テキスト(または行。フラグによっては)の終わりに一致します。少し複雑に見えますが、古典的な比較を行うと少し速くなる可能性があります。
$ok = strlen($text) == 14 && ($text[0] == '+') && is_numeric($text[1]) && is_numeric($text[2]) && ...
「charが[0-9]に一致するかどうかを確認する」という話をするときに、電話をかけることを指すかどうかはis_numeric()
わかりませんが、それは私が考えることができる「最も簡単な」方法の1つです。
正規表現が答えです。
パターンは次のとおりです。
^\+[0-9]{3}-[0-9]{4}-[0-9]{4}$