2

入力フィールドを制限するために正規表現マスクを作成しようとしています。

これまでのところ、私はこれを思いついた

^[^0][0-9]*(,?[0-9]*)*$

受け入れられる値は次のとおりです。

123456,12,1,654,19512
2321
312,1

基本的に、与えられた整数の後にコンマと別の整数が続きます (桁数は重要ではありません) が、整数のグループはゼロで始まるべきではありません。

ただし、次の値が受け入れられ、受け入れられないため、余分な式がありません。

123,012
123,,0123
123,0,0
123,0,0,,,,0,31

私は正規表現コードが初めてなので、本当に助けていただければ幸いです。

編集:値の末尾にコンマがある可能性があることは知っていますが、それは問題ありません。値が送信された後、入力検証が既に行われています

また、入力内でバックスペースを機能させるにはどうすればよいですか?

4

4 に答える 4

3

コンマをオプションとしてマークしないでください。

^[1-9][0-9]*(,[1-9][0-9]*)*$
于 2013-10-15T18:16:36.227 に答える
1

これで十分です。

^[1-9]\d*(,\s*[1-9]\d*)*$

1 ~ 9 で始まり、その後に 0 個以上の数字が続き、その後にカンマが 0 回以上前に付いた同じ構造が続くもの

于 2013-10-15T18:20:16.317 に答える
0

この正規表現は、キーストローク間で検証する場合に機能する可能性があります。
受け入れた後、別の正規表現が必要です。

 //  ^(?![0,]|[\d,]*,0$|[\d,]*,,$)[\d,]+$

 ^           # BOL
 (?!                    # Not any of these
      [0,]              # No 0 or , at beginning of string
   |  [\d,]* ,0 $       # No  ,0 at end of string
   |  [\d,]* ,, $       # No  ,, at end of string
 )
 [\d,]+      # validate these to restrict input chars
 $           # EOL
于 2013-10-15T20:07:14.177 に答える
0

コメントを追加したかったのですが、書きすぎてしまったので、これを回答に転送します。

Guillaume Poussel と Luis Gonzalez が書いた正規表現はどちらもあなたが望むものです (ただし、構文がわずかに異なり、さらに重要なことに、Luis の正規表現ではコンマと整数の間に空白を使用できます) - 最後の検証のために。Guillame Poussel がコメントで指摘したように、2 つのステップで検証を行う必要があります。1 つは入力マスクとして、もう 1 つはすべて完了した検証としてです。彼らが提供した正規表現は、すべて完了した部分用です。この正規表現を入力コントロールのぼかしイベントに配置することをお勧めします。入力を制御する(ユーザーのキーストロークをキャンセルする)キープレスまたは同様のイベントの場合、末尾のコンマ、先頭のゼロ、さらには複数のコンマで終わる文字列を許可する、より緩い正規表現が必要です
^[1-9][0-9]*(,[0-9]*)*$

クライアントが無効な入力文字列を挿入できて、それは何も悪いことではないと言われたのに、別のフィールドまたは何かに移動した後に無効であると通知されたことに不満がある場合は、既に取得した正規表現を答えますが、マスク正規表現(入力が無効な場合にキープレスをキャンセルする)として使用する代わりに、その正規表現でフィールドの背景を赤などに変更して、入力がすぐに人に通知されるようにすることができます。現在は有効ではありません。

また、私が提案したような緩いマスク入力と同じイベントの最終的な正規表現がある混合ソリューションを実行することもできますが、すべて完了した正規表現に失敗したときにキープレスをキャンセルする代わりに、背景を赤などに変更します緩い正規表現が失敗した場合にのみキャンセルします。このようにして、ユーザーはほとんどの無効な入力文字列を書き込むことを制限され、有効でない入力文字列については、有効でないことがすぐに通知されます。

于 2013-10-15T20:42:53.000 に答える