2011-10-05 183 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]]" ...