2

次の番号範囲の正規表現を生成しようとしています...

開始番号として00001または0000001が必要です。

ISRAEL  NNNNN   00001   99999
        NNNNNNN 0000001 9999999

私はこの正規表現で試しています:^0*[0-9]{5}$|^0*[0-9]{7}$

ただし、次のシナリオでは失敗します。あるべきではないこれらの番号を受け入れます。

0100012
000010121
4

2 に答える 2

0

先行番号が含まれているかどうかを質問から判断することは不可能なので、次の2つのバージョンがあります。

先頭の数字を含む:

^(00)?0{4}1\s+[0-9]{5}([0-9]{2})?$

先頭の数字なし:

^[0-9]{5}([0-9]{2})?$
  • (00)?0{4}1「2オプション0、次に4 0、次に1」 を意味します
  • [0-9]{5}([0-9]{2})?「5桁、次にオプションの2桁」を意味します
于 2012-11-09T13:32:04.257 に答える
0

OPが求めているのは、5桁または7桁すべてのうち、少なくとも1つがゼロ以外になるようにする正規表現の書き方だと思います(おそらく、郵便番号をすべてゼロにすることはできません)。

明らかに、正規表現を使用せずにこれを行う方がはるかに簡単です。整数を解析し、それがゼロより大きく、100000または1000000より小さいかどうかを確認すれば、完了です。もちろん、ユーザーにコードの前に余分なゼロを入力させたい場合は...それがあなたの選択です。最近では、ユーザーはさらに奇妙な要求に応じます。

しかし、タスクの複雑さに挑戦し、価格に関係なく正規表現を使用してそれを実行したい場合は、次のようにします。

^(?:0*[1-9]0*)+$

これにより、文字列のすべての文字が数字であり、そのうちの少なくとも1つがゼロ以外であることが保証されます。さらに、文字列の長さをチェックすると、7または5に等しいかどうかがわかります(これは比較的簡単な方法です)。

難しい方法:

^\d{4}[1-9]|\d{3}[1-9]\d|\d{2}[1-9]\d{2}|\d[1-9]\d{3}|[1-9]\d{4}$

(これは5桁の郵便番号用です。7桁の郵便番号に拡張してみてください):P

于 2012-11-09T14:35:07.857 に答える