2011-10-05 176 views
0

我正在使用jquery.validationengine.en.js来(自定义)验证我的表单字段。对于一个字段,我使用两个自定义验证。我不想同时显示字段的验证消息。它一次只能显示一个味精。怎么做?结合两个正则表达式

请在下面的代码找到 注意:allzero也被其他一些领域使用。

"phone": { 
        "regex": /^[0-9]{8,15}$/, 
        "alertText": "* Invalid phone number" 
       }, 
    "allzero": { 
        "regex": /([^((\+)*(0*))])/, 
        "alertText": "* Invalid number" 
       }, 

HTML代码:

<input type="text" name="phone" id="phone" class="textBox textNormal validate[maxSize[30],custom[onlyNumberSp],custom[phonenumber],custom[allzero]]" onfocus="jQuery('#adduserform').validationEngine('attach',{Overflown:false})"> 

    <input type="text" name="mobile" id="mobile" class="textBox textNormal validate[maxSize[30],custom[onlyNumberSp],custom[mobile],custom[allzero]]" value="" onfocus="jQuery('#adduserform').validationEngine('attach',{Overflown:false})"> 
+0

你能表现出一定的代码?具体来说,两个验证规则的定义是什么? –

+0

添加代码。请检查 – Nila

+0

如果您的第一个正则表达式只允许数字,为什么第二个正则表达式允许任意数量的前导加号?无论如何,第二个正则表达式很糟糕 - 大概你的意思是类似'/^\ +?0 * $ /'? – tripleee

回答

1

望着验证引擎使用说明(在https://github.com/posabsolute/jQuery-Validation-Engine),似乎有可能使用自定义函数调用来验证字段(funcCall验证:这可以通过产生以下的正则表达式先行断言被克服)。所以,你应该能够使用函数来检查这两个正则表达式此起彼伏,并返回相应的错误信息,如果他们中的一个不匹配:

function checkPhoneNumber(field, rules, i, options){ 
    if (!field.val().match(/^[0-9]{8,15}$/)) 
     return "* Invalid phone number"; 
    else if (!field.val().match(/([^((\+)*(0*))])/)) 
     return "* Invalid number"; 
} 
2

一种方式是始终需要一个非零数字某处的字符串中。这可以通过正则表达式部分[0-9]*[1-9][0-9]*完成。但是,您然后失去了轻松检查字符串长度的能力。

/^(?=[0-9]{8,15}$)[0-9]*[1-9][0-9]*$/ 
1

下面是一个使用的时候,我可以怎么做功能:

 "phoneORallzero": { 
      "func": function(field, rules, i, options){ 
       if (field.val().match(/^[0-9]{8,15}$/)) 
        return true; 
       else if (field.val().match(/([^((\+)*(0*))])/)) 
        return true; 
      }, 
      "alertText": "* invalid phone or number." 
     } 

在HTML代码:

... class = "validate[custom[phoneORallzero]]" ...