2014-07-13 55 views
0

以下代碼給出了一個簡單的註冊表單,並使用JavaScript來驗證用戶的輸入。在Chrome中運行時,會有預期的警報。但在IE和Firefox中,即使沒有任何內容輸入到表單中,該頁面也只會轉到adduser.php文件中。JS在Chrome中工作,但不支持Firefox或IE

CSS

.signup { 
    font: normal 14px helvetica; 
    color: #000000; 
    border: solid 6px #555555; 
    } 

JS

function validate() { 
    var fail = ""; 
    fail += validateForename(document.getElementById("forename").value); 
    fail += validateSurname(document.getElementById("surname").value); 
    fail += validateUsername(document.getElementById("username").value); 
    fail += validatePassword(document.getElementById("password").value); 
    fail += validateAge(document.getElementById("age").value); 
    fail += validateEmail(document.getElementById("email").value); 

    if (fail == "") return true; 
    else alert(fail); 
    return false; 
} 


function validateForename(str) { 
    if (str == "") return "No forename has been found\n"; 
    return ""; 
} 

function validateSurname(str) { 
    if (str == "") return "No surname has benn found\n"; 
    return ""; 
} 

function validateUsername(str) { 
    if (str == "") return "No username has been found\n"; 
    if (str.length < 5) return "Username must be at least 5 characters\n"; 
    if (/[^a-zA-Z0-9_-]/.test(str)) return "Only a-z, A-Z, 0-9, - and _ are allowed in username\n"; 
    return ""; 
} 

function validatePassword(str) { 
    if (str == "") return "Password can not be empty\n"; 
    if (str.length < 6) return "Password must be at least 6 characters\n"; 
    if (!/[0-9]/.test(str) || !/[a-z]/.test(str) || !/[A-Z]/.test(str)) return "Password must have at least one each of a-z, A-Z, 0-9\n"; 
    return ""; 
} 

function validateAge(str) { 
    if (isNaN(str)) return "No age has been found\n"; 
    if (str < 18 || str > 110) return "Age must be between 18 and 110\n"; 
    return ""; 
} 

function validateEmail(str) { 
    if (str == "") return "No email address has been found\n"; 
    if (!(str.indexOf('.') > 0 && str.indexOf('@') > 0) || /[^[email protected]]/.test(str)) return "The email address is invalid\n"; 
    return ""; 
} 

HTML

<table class="signup" border="0" cellpadding="4" bgcolor="#eeeeee"> 
    <th colspan="2" align="center">Sign Up</th> 
    <form method="post" action="adduser.php" onSubmit="return validate()"> 
     <tr> 
      <td>Forname:</td> 
      <td> 
       <input type="text" name="forename" id="forename" maxlength="32" /> 
      </td> 
     </tr> 
     <tr> 
      <td>Surname:</td> 
      <td> 
       <input type="text" name="surname" id="surname" maxlength="32" /> 
      </td> 
     </tr> 
     <tr> 
      <td>Username:</td> 
      <td> 
       <input type="text" name="username" id="username" maxlength="16" /> 
      </td> 
     </tr> 
     <tr> 
      <td>Password:</td> 
      <td> 
       <input type="password" name="password" id="password" maxlength="12" /> 
      </td> 
     </tr> 
     <tr> 
      <td>Age:</td> 
      <td> 
       <input type="text" name="age" id="age" maxlength="3" /> 
      </td> 
     </tr> 
     <tr> 
      <td>Email:</td> 
      <td> 
       <input type="text" name="email" id="email" maxlength="64" /> 
      </td> 
     </tr> 
     <tr> 
      <td colspan="2" align="center"> 
       <input type="submit" value="Signup" /> 
      </td> 
     </tr> 
    </form> 
</table> 
+0

順便說一下,您的HTML格式有點不正確。您的''單元格不包含在''中,您的'

'聲明也處於一個陌生的地方。 –

回答

0

的問題是在這條線(55):

if (!(str.indexOf('.') > 0 && str.indexOf('@') > 0) || /[^[email protected]]/.test(str)) return "The email address is invalid\n"; 

你聲明的字符類無效:

/[^[email protected]]/ //--> Wrong 
/[^[email protected]]/ //--> Right 

瀏覽器嘗試解釋_-._.之間的字符範圍,並非常失敗。

0

以下的正則表達式(線55)產生在螢火蟲錯誤(語法錯誤:無效範圍在字符類):現在在

/[^\w-]+/gi

Works的我:

/[^[email protected]]/

嘗試這一個代替FF和IE 11.

0

這個正則表達式對象不是很可靠:

/[^[email protected]]/ 

Chrome容忍這一點,但Firefox不明白_-.不是字符範圍,如a-z。您可以將-移動到最後以避免含糊不清。最終正則表達式變爲(i表示不區分大小寫匹配)

/[^[email protected]]/i 
相關問題