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

尽管如果可能的话最好避免使用正则表达式进行范围验证,但我认为您的问题在于您的第二个正则表达式段:

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

第一个将处理长度为 1 到 5 的所有数字,因此第二个应处理100000最多(但不包括)170000(由第三段处理)的六位数字。

但是,它只处理四位数字(无论如何都已经由第一段处理)所以我怀疑它实际上应该是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 回答