0

こんにちは、値が 170000 未満かどうかを確認するための小さな検証があります。これが私が試したことですが、いくつかの小さな問題があります。値の範囲は 0 ~ 170000 です

/^(?:[1-9]\d{0,4}|[1-6]\d{3}|170000)$/

誰かがこれを修正して説明してください。

4

5 に答える 5

3

なぜ正規表現が必要なのですか?

if (value <= 170000 && value >= 0)あなたの仕事を達成することはできませんか?

于 2012-09-25T08:17:50.940 に答える
2
/^\D*(\d{1,5}|1[0-6]\d{4}|170000)\D*$/

これにより、文字列全体がチェックされます。それ以外の場合は、正規表現の境界を微調整する必要があります。

于 2012-09-25T08:29:31.117 に答える
1
\b(\d{1,5})\b|\b([1][0123456]\d{4})\b|\b(170000)\b

デモ: http://regexr.com?328t5

説明:

  1. \b(\d{1,5})\b: 0 から 99999 までのすべての数字に一致
  2. \b([1][0123456]\d{3})\b: 1 の後に 0 から 6 が続き、その後に任意の 4 桁 (100000 から 169999) が続く一致

  3. \b(170000)\b: マッチ 170000

于 2012-09-25T08:33:26.623 に答える
1

可能であれば範囲検証に正規表現を使用することは避けるのが最善ですが、問題は正規表現セグメントの2番目にあると思います:

  • [1-9]\d{0,4}
  • [1-6]\d{3}
  • 170000

最初のセグメントは 1 から 5 までの長さのすべての数値を処理し、2 番目のセグメントは 6 桁までの数値を処理する必要があります100000(170000これは 3 番目のセグメントで処理されます)。

ただし、4桁の数字のみを処理しているため(とにかく最初のセグメントで既に処理されています)、実際には1[0-6]\d{4}.

つまり、/^(?:[1-9]\d{0,4}|1[0-6]\d{4}|170000)$/.

于 2012-09-25T08:36:56.867 に答える
0

これはそれを解決し、非常に簡単で、RegExpなしで解決しました:)検証のためにRegExpを投稿した他の人も彼らのおかげです。

Ext.apply(Ext.form.field.VTypes, {
    //  vtype validation function
    msrp: function(val, field) {
        if(val >= 0 && val <= 170000){
            return true;                
        }else{
            return bundle.getMsg('vl.locate.label.ntavalidmsrp');
        }
        return validMaxMSRPTest.test(val);
    },
    // vtype Text property: The error text to display when the validation function returns false
    msrpText: bundle.getMsg('vl.locate.label.ntavalidmsrp')
});
于 2012-09-25T08:36:15.877 に答える