2014-07-13 57 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 
相关问题