文字列は 9 文字または 11 文字のサイズでなければならないという正規表現。それ以外のものはありません.私がやったとき、9文字以上で動作していました((\d{9})|(\d{11})$ 200文字のときに有効で、それは私が欲しいものではない...
3 に答える
開始点も固定する必要があります。次のようなことを試してください:
^((\d{9})|(\d{11}))$
また、数字だけでなく、任意の 9 文字または 11 文字を使用できる場合は、次のように使用します。
^((.{9})|(.{11}))$
開始アンカー ( ^
) も必要です。そうしないと、文字列の末尾の 9 桁または 11 桁に一致します。
^(\d{9}|\d{11})$
または同等:
^\d{9}(\d\d)?$
また、任意の文字の 9 または 11 と一致させたい場合は、次を使用します。
^.{9}(..)?$
((\d{9})|(\d{11})$
...は括弧がないため、有効な正規表現ではありません。
これは、おそらく質問に書くつもりだった修正された正規表現です。
((\d{9})|(\d{11}))$
さて、あなたの質問についてですが、入力する桁数を 9 桁または 11 桁に制限したいと考えています。その方法は次のとおりです。
^((\d{9})|(\d{11}))$
ここで行っているのは、正規表現エンジンがデータの解析方法を認識できるように、式の開始^
と終了を定義することです。$
開始と終了を定義しない場合、式はデフォルトで「貪欲」になります。これが、9 桁または 11 桁を超える数字と一致していた理由です。end のみを定義したため、9 または 11 の各組み合わせである start のすべての出現に一致しました。
すでに指摘したように、文字を一致させたい場合は、別の式に置き換える必要があります。
^((.{9})|(.{11}))$
数字、文字、およびアンダースコアのみを一致させたい場合は、これを使用できます。
^(([A-Za-z_0-9]{9})|([A-Za-z_0-9]{11}))$
ただし、いずれの場合でも、式は次のようにより簡単に定義できます。
^.{9,11}$
[A-Za-z_0-9]
また、必要に応じてまたはのいずれかを代用\d
します。
元の表現の周りにある追加()
は、基本的な一致する正規表現には必要ありません。交換用のキャプチャ グループが必要な場合は、これらが必要です。