2013-03-17 71 views
0

您好我是新來的JavaScript和我有以下功能:正則表達式在JavaScript

function checkform() { 
    var theForm = document.getElementById('login_form'); 
    var regName = /^[a-zA-Z ]+$/; 
    var firstname = theForm.firstname.value; 

    if (
     (firstname == "" || theForm.firstname.value.length > 30) && 
     (regName.test(firstName) == false) 
    ) { 
     alert("That is not a valid first name!"); 
     theForm.firstname.focus(); 
     return false; 
    } 
} 

它工作在這個意義上,它會檢查數據不空,不大於30。我的問題是目前允許用戶輸入與我的正則表達式(即數字數據)不匹配的數據。我看不出有關邏輯的任何問題。

感謝

+0

檢查對正則表達式'KeyPress'或'Blur'事件,如果犯規的比賽然後清除'textbox' – Vitthal 2013-03-17 14:41:38

回答

3

在你的條件語句嘗試這樣做:

if ((firstname == "" || theForm.firstname.value.length > 30) || (regName.test(firstname) == false)) { 
    // ... 
} 

我已經改變了 「& &」(和)運算符「|| 「 (或),因爲你不需要檢查這兩個條件(空或長於30,不匹配正則表達式),但只是其中任何一個(空或長於30或不正確的正則表達式)。

+0

Precicely ..其實,如果字符串爲40長,正則表達式很滿意它會通過.. 。如果表單元素長度設置爲30個字符,他只需要空字符串測試||正則表達式測試 – Radiotrib 2013-03-17 14:50:03

+0

已經嘗試了這種解決方案,仍然允許測試數據 - '128'。 – underflow 2013-03-17 14:51:42

+0

我已經用「firstname」而不是「firstName」(Javascript是區分大小寫的語言)更新了代碼片段,現在就試用它。 – mirrormx 2013-03-17 14:55:10

1

試試吧

var regName = /^[a-zA-Z ]{3,30}$/; 
if (!regName.test(firstName)){ //make an error 
0
<input id="txtChar" onkeypress="return isNumberKey(event)" 
     type="text" name="txtChar"> 

    function isNumberKey(evt) 
    { 
     var charCode = (evt.which) ? evt.which : event.keyCode; 
     if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57) || event.value > 30) 
     return false; 

     return true; 
    }