0

次の正規表現があります。^-?([0-9]{0,3}$|[0-9]{0,2}\.?[0-9]{0,1}$)

4444 のような 4 桁の数字は許可されません。ここで試してみると、式は正常に機能しますが、javascript では、コードが期待どおりに機能しません。4桁の数字を許可しています。他のすべての検証は正常に機能します。

これが私のコードです:

http://jsfiddle.net/PAscG/

reg0str = "^-?([0-9]{0,3}$|[0-9]{0,2}\.?[0-9]{0,1}$)";
var reg0 = new RegExp(reg0Str);
if (reg0.test(temp)) return true;

機能を説明するための更新:

3桁のみを許可したい。したがって、10 進数の後に 1 桁、10 進数の前に 2 桁のみを許可するか、10 進数の前に最大 3 桁を許可し、10 進数の後には何も許可しないかのいずれかです。

だから私の最初の部分:
[0-9]{0,3}$これは最大3桁で数字のみを許可するはずだと思います。

次の部分: [0-9]{0,2}\.?[0-9]{0,1}$小数点の前に最大 2 桁、小数点の後に最大 1 桁を許可する必要があります。

4

3 に答える 3

1

OPの説明に続いて

正規表現は

/^-?(\d{0,3}\.?|\d{0,2)\.\d)$/

  ^        start of string
  -?       optional minus sign (use [-+]? if you accept a plus sign)
  (        start of OR group
    \d{0,3}  0 1, 2 or 3 digits
    \.?      optional decimal point
  |        OR
    \d{0,2}  0 1, or 2 digits
    \.       decimal point
    \d       final decimal
  )        end of OR grouping
  $        end of string
于 2012-08-01T18:12:08.243 に答える
1

これを試して:

 var reg0str = "^\-?[0-9]{0,2}[\.]?[0-9]?$";

理由はわかりませんが、クラス内にカプセル化されていない場合、ピリオドはワイルドカード文字として扱われているようです。

これが更新されたjsfiddleです

于 2012-08-01T17:34:00.020 に答える
1

"…\.…"は文字列リテラルです。バックスラッシュはドットをドットにエスケープし、正規表現のドットは数字に一致します。RegExpコンストラクターでバックスラッシュを含む文字列を渡すには、バックスラッシュをエスケープする必要があります。

new RegExp("^-?([0-9]{0,3}$|[0-9]{0,2}\\.?[0-9]{0,1}$)")

または、正規表現リテラルを使用します (簡略化されていますが、同じものに一致します):

/^-?\d{0,2}\.?\d?$/
于 2012-08-01T18:18:41.500 に答える