3

次のパターンで正規表現を生成しようとしています。最大16桁の数値で、内部にコンマを含めることも含めないこともできます。最初に、最後にコンマを含めることはできません。私はこれを試しました:

^(?:\d+(?:,{1}\d+){1})$

問題は、グループ{0,16}の結果を数えられないことです。これは、式に適合する必要がある数値のリストです。

123,34
1,33333333
1222222233

収まらない数字の例:

1111,1111,1111、11111 11111、11111111111111111111111111111,111111111111111

16
文字以上)

4

2 に答える 2

1

その前の長さを確認するか、を使用してください^(?=[\d,]{1,16}$)(?:\d+(?:,\d+)?)$

これは、実際の一致を行う前に長さをチェックする先読みです。

于 2013-01-25T11:34:19.660 に答える
0

正規表現フレーバーが先読みアサーションをサポートしている場合は、次を使用できます。

^(?!(?:\d{17,}$|[,\d]{18,}$))(?:\d+(?:,\d+)?)$

ここRegexrでそれを参照してください

余分なものを削除{1}し、分数のグループをオプションにしました。

否定的な先読みアサーション(?!(?:\d{17,}$|[,\d]{18,}$))は、長さの要件をチェックしています。末尾まで17桁以上、または末尾まで18桁以上のカンマが見つかった場合は失敗します。ここで文字クラスに複数のコンマを許可することは問題ではありません。次のパターンによって、コンマが1つしかないことが保証されます。

于 2013-01-25T11:33:23.080 に答える