-6

X、y、zはすべて数字です。文字列の長さが14文字かどうかを確認する方法を知っているだけでなく、各文字を繰り返して、文字が[0-9]と一致するかどうかを確認したくありません。

より賢い方法はありますか?正規表現のplsはありません....私はそれが怖いです。

4

4 に答える 4

1

あなたが使用することができます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}$怖いものではありません。かなり簡単です。正規表現の土地にはもっと悪いことがあります。

于 2012-11-27T11:55:37.293 に答える
1

正規表現を恐れる必要はありません。正規表現は、次のものの単なるコレクションです。

  1. 一連の文字のいずれかを示すために使用できる記号、および
  2. これらのシンボルをグループ化する方法を示す演算子。

たとえば、記号\dは数字のセット ( ) の任意の文字と一致します0-9。演算子{n}は、前のシンボルn時間の繰り返しを示します。

この知識を武器に、問題をフレーズで定義してみましょう。

パート 1:プラスの後に 3 桁の数字を一致させる

正規表現に変換すると、これは次のとおりです。\+\d{3}


パート 2:ハイフンの後に 4 桁の数字を一致させる

正規表現に変換すると、これは次のとおりです。-\d{4}


パート 3:別のハイフンとそれに続く 4 桁の数字を一致させる

正規表現に変換すると、これは次のとおりです。-\d{4}


全体的に

すべてをまとめると、次のようになります。

\+\d{3}-\d{4}-\d{4}

于 2012-11-27T11:51:52.500 に答える
0

各キャラクターを見る方法はありません。正規表現でさえ(舞台裏で)それをしなければならないでしょう。また、正規表現は何も恐れることはありません。実際、特に次のような場合は、実際にはかなり簡単です。

$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つです。

于 2012-11-27T11:55:22.620 に答える
0

正規表現が答えです。
パターンは次のとおりです。

^\+[0-9]{3}-[0-9]{4}-[0-9]{4}$
于 2012-11-27T11:51:25.710 に答える