2012-04-06 83 views
9

我想檢查輸入字段是否具有屬性「模式」,如果是這樣,執行正則表達式檢查aganst說pattern.I知道這已經完成了HTML5,但我想要處理該事件我。我收到此錯誤:遺漏的類型錯誤:對象A-ZA-Z有沒有方法 '測試'jquery正則表達式驗證

///Check Perform Reg/////////////////////////////////////////////////////// 
     if ($(this).attr("pattern")) { 
      var reg = $(this).attr("pattern"); 
      var currentValue = $(this).val(); 


      if (reg.test(currentValue)) { 
       $(this).after($error.clone().text("Invalid Input.Try Again.")); 
       $(".error:hidden").fadeIn("slow"); 
       hasError = true; 
       return false; 
      } 

      } 
     /////////////////////////////////////////////////////////////////////////// 

仍然沒有運氣,

也在這裏是我的html:

<div> 
    <input class="formInput" name="First Name" pattern="^[A-Za-z_-][A-Za-z0-9_-]*$" type="text" id="frmFirst" min="2" maxlength="30" required="required"/> 
    <span>First Name</span> 
</div> 

回答

21

通常用javascript/jquery處理正則表達式,如

var reg = /pattern/; 
if (reg.test($(this).val())) { 
    // perform some task 
} 
+0

它看起來與我的代碼已經做的一樣。除了從變量傳遞模式 – user1265533 2012-04-06 04:13:40

+0

是的它看起來像是一樣的,對於正則表達式,您需要將模式放在/ [pattern] /例如/ test /中以便與值測試匹配。 – irfanmcsd 2012-04-06 04:19:11

0

字符串不是RegExp對象。 你可以使用這樣的:

var reg = new RegExp($(this).attr("pattern")); 
+0

還是沒有運氣.. – user1265533 2012-04-06 13:02:58

4

正如已經被別人你需要使用的對象,而不是通過jQuery的ATTR()方法返回的字符串的提及。你可以在這裏看到兩者的區別。

將返回 「字符串」:

var reg = $(this).attr("pattern"); 
console.log(typeof reg) 

會返回 「對象」:

var reg = new RegExp($(this).attr("pattern")); 
console.log(typeof reg); 

所以,如果你更換:

var reg = $(this).attr("pattern"); 

有了:

var reg = new RegExp($(this).attr("pattern")); 

遺漏的類型錯誤:對象A-ZA-Z有沒有方法「測試」錯誤將消失

...但你的驗證仍然不能很好地工作。你的條件邏輯說,如果正則表達式測試返回true,則處理錯誤:

if (reg.test(currentValue)) { 
    //error handling 
} 

相反,如果測試返回FALSE,它應該處理的錯誤:

if (!reg.test(currentValue)) { 
    //error handling 
} 

這應該爲你工作。

3

你可以嘗試這樣的事情。它會提醒「var2失敗」。

var var1 = "1"; 
var var2 = "A"; 
var myRegEx = new RegExp('[0-9]+'); //make sure the var is a number 

if (var1 != myRegEx.exec(var1)) { 
    alert("var1 failed"); 
} 

if (var2 != myRegEx.exec(var2)) { 
    alert("var2 failed"); 
} 
0

下面是在MVC中使用Jquery基於正則表達式驗證文本框的正確方法。請注意,這個表達式用於驗證一個字符串中的多個電子郵件地址:

 var emailReg = new RegExp(/^([A-Z0-9.%+-][email protected]@[A-Z0-9.-]+.[A-Z]{2,6})*([,;][\s]*([A-Z0-9.%+-][email protected]@[A-Z0-9.-]+.[A-Z]{2,6}))*$/i); 
     var emailText = $('#email').val(); 

     if (!emailReg.test(emailText)) { 
      alert('Wrong Email Address\Addresses format! Please reEnter correct format'); 
      return false; 
     } 
    } 
+0

jquery在任何地方都是一樣的。 你只需要將它應用到你想要驗證這個jQuery表達式的文本框或輸入字段。 – 2016-01-20 19:19:05