0

文字列は 9 文字または 11 文字のサイズでなければならないという正規表現。それ以外のものはありません.私がやったとき、9文字以上で動作していました((\d{9})|(\d{11})$ 200文字のときに有効で、それは私が欲しいものではない...

4

3 に答える 3

2

開始点も固定する必要があります。次のようなことを試してください:

^((\d{9})|(\d{11}))$

また、数字だけでなく、任意の 9 文字または 11 文字を使用できる場合は、次のように使用します。

^((.{9})|(.{11}))$
于 2013-09-30T21:56:58.323 に答える
1

開始アンカー ( ^) も必要です。そうしないと、文字列の末尾の 9 桁または 11 桁に一致します。

^(\d{9}|\d{11})$ 

または同等:

^\d{9}(\d\d)?$ 

また、任意の文字の 9 または 11 と一致させたい場合は、次を使用します。

^.{9}(..)?$ 
于 2013-09-30T21:57:00.903 に答える
1
((\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します。

元の表現の周りにある追加()は、基本的な一致する正規表現には必要ありません。交換用のキャプチャ グループが必要な場合は、これらが必要です。

于 2013-09-30T22:03:11.857 に答える