2013-05-30 135 views
1

我有一個javascript函數來驗證我的表單上的字段。該功能應該確保該字段不爲空,不超過35個字符的限制,並且只包含字母字符和連字符( - )。我有代碼,以確保該字段不是空的,並且它不超過35個字符工作正常,但我添加了驗證字段的可用字符的代碼,我通過將字段留空以確保仍然有效但是當我點擊提交按鈕該功能似乎並沒有驗證,沒有給我一個警報,只是提交。這裏是我的代碼:Javascript名稱驗證

function validateFamily() 
{ 
var family=document.getElementById('family'); 
var stringf = document.getElementById('family').value; 
if (family.value=="") 
    { 
    alert("Family name must be filled out"); 
    return false; 
    } 
else if (document.getElementById('family').value.length > 35) 
    { 
     alert("Family name cannot be more than 35 characters"); 
     return false; 
    } 
else if (/[^a-zA-Z\-\]/.test(stringf)) 
    { 
     alert("Family name can only contain alphanumeric characters and hypehns(-)") 
     return false; 
    } 
    return true; 
} 

<form name="eoiform" method="POST" action="<?php echo $_SERVER["PHP_SELF"];?>" id="eoi" onsubmit="return validateFamily() && validateGiven() && validateMaleFemale() && validDate() && validateAddress() && validatePost() && validateParent() && validateWork() && validateHome() && validateMob() && validateCheckBoxes();"> 

<b>Student's Family Name</b> 
<br> 
<input type="text" id="family" name="family" /><?php echo $strmsgf; ?> 

<input type="submit" name="submit" id="submit" value="submit" /> 

</form> 

任何人都可以告訴我如何解決我的代碼?

+0

會發出警報(「Alert」);在validateFamily()函數的開始工作? – konnection

+0

控制檯在您的瀏覽器中的登錄是您可能想要查看調試此類型的情況的東西,它顯示了什麼? – konnection

+0

@konnection如果你的意思是「姓氏必須填寫」比如果我拿出可用的字符驗證碼比是的,它工作得很好,但目前它沒有。 – AJJ

回答

1

更新:

對不起,問題是你的正則表達式,我錯過了,改變這種完全正常的:

var ck_password = /^[A-Za-z0-9-]/; 

      if(!ck_password.test(stringf)) 
      { 

       alert("Family name can only contain alphanumeric characters and hypehns(-)") 

      } 

控制檯中鉻,轉到選項在右上角絡筒機,選擇TOOLS,然後選擇DEVELOPER TOOLS。

+0

剛剛嘗試過,不幸的是沒有運氣,同樣的問題。 – AJJ

+0

現在嘗試,或者只是在您的代碼中將您的正則表達式更改爲我的答案中的正則表達式。希望它有幫助 – konnection

+1

完美的工作,非常感謝! – AJJ

0

嘗試重命名提交按鈕,刪除ID和名稱「提交」(重命名爲「doSubmit」或smth),它可能會導致問題和與事件「提交」形式衝突。

+0

這種衝突將是瀏覽器中的嚴重錯誤。 –

2

您的正則表達式已損壞。你已經逃過了字符集周圍的方形括號。試試這個:

else if (/[^a-zA-Z0-9\-]/.test(stringf)) 

此外,還有在那裏有很多怪異的雜波,這很煩人,但不是致命的:有多少次,你真的需要在方法調用的getElementById(「家族」)?一旦。

if (stringf=="") 
{ 
    alert("Family name must be filled out"); 
    return false; 
} 
else if (stringf.length > 35) 
{ 
    alert("Family name cannot be more than 35 characters"); 
    return false; 
} 
else if (/[^a-zA-Z0-9\-]/.test(stringf)) 
{ 
    alert("Family name can only contain alphanumeric characters and hypehns(-)") 
    return false; 
} 
return true; 
+1

那裏有很多奇怪的混亂,那很煩人,但不是致命的:如果你在末尾加上else {return true},你可以擺脫那些'return false;'-lines系列'else if's並將最後一個布爾值更改爲false。 (_這裏的諷刺只是開玩笑) –