Javascript JS在Chrome中工作,但不是Firefox或IE

Javascript JS在Chrome中工作,但不是Firefox或IE,javascript,html,firefox,Javascript,Html,Firefox,下面的代码给出了一个简单的注册表单,并使用JavaScript验证用户的输入。在chrome中运行时,会出现预期的警报。但是在IE和Firefox中,页面只会转到adduser.php,没有任何提示,即使表单中没有输入任何内容 CSS .signup { font: normal 14px helvetica; color: #000000; border: solid 6px #555555; } function validate() { var f

下面的代码给出了一个简单的注册表单,并使用JavaScript验证用户的输入。在chrome中运行时,会出现预期的警报。但是在IE和Firefox中,页面只会转到adduser.php,没有任何提示,即使表单中没有输入任何内容

CSS

.signup {
    font: normal 14px helvetica;
    color: #000000;
    border: solid 6px #555555;
    }
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) || /[^a-zA-Z0-9_-.@]/.test(str)) return "The email address is invalid\n";
    return "";
}
JS

.signup {
    font: normal 14px helvetica;
    color: #000000;
    border: solid 6px #555555;
    }
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) || /[^a-zA-Z0-9_-.@]/.test(str)) return "The email address is invalid\n";
    return "";
}
函数验证(){
var fail=“”;
fail+=validateForName(document.getElementById(“forename”).value);
fail+=validateSurname(document.getElementById(“姓氏”).value);
fail+=validateUsername(document.getElementById(“用户名”).value);
fail+=validatePassword(document.getElementById(“密码”).value);
fail+=validateAge(document.getElementById(“age”).value);
fail+=validateEmail(document.getElementById(“email”).value);
if(fail==“”)返回true;
其他警报(失败);
返回false;
}
函数验证重命名(str){
如果(str==“”)返回“未找到名字\n”;
返回“”;
}
函数validateSurname(str){
如果(str==“”)返回“未找到姓氏\n”;
返回“”;
}
函数validateUsername(str){
如果(str==“”)返回“未找到用户名\n”;
如果(str.length<5)返回“用户名必须至少为5个字符\n”;
如果(/[^a-zA-Z0-9_-]/.test(str))返回“用户名中只允许a-z、a-z、0-9、-和u”;
返回“”;
}
函数validatePassword(str){
如果(str==“”)返回“密码不能为空\n”;
如果(str.length<6)返回“密码必须至少为6个字符\n”;
如果(!/[0-9]/.test(str)| |!/[a-z]/.test(str)| | |!/[a-z]/.test(str))返回“密码必须至少有一个a-z、a-z、0-9\n”;
返回“”;
}
函数validateAge(str){
if(isNaN(str))返回“未找到年龄\n”;
如果(str<18 | | str>110)返回“年龄必须在18到110之间\n”;
返回“”;
}
函数validateEmail(str){
如果(str==“”)返回“未找到电子邮件地址\n”;
如果(!(str.indexOf('.')>0和&str.indexOf('@')>0)| |/[^a-zA-Z0-9.-.@]/.test(str))返回“电子邮件地址无效\n”;
返回“”;
}
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>

注册
姓名:
姓:
用户名:
密码:
年龄:
电邮:

问题出在这一行(55):

您声明的字符类无效:

/[^a-zA-Z0-9_-.@]/  //--> Wrong
/[^a-zA-Z0-9_.@-]/  //--> Right
浏览器试图将
.
解释为介于
.
之间的字符范围,但严重失败。

以下正则表达式(第55行)在Firebug中产生错误(SyntaxError:字符类中的无效范围):

/[^a-zA-Z0-9.@]/

试试这个:

/[^\w-]+/gi


我现在在FF和IE 11中工作。

此正则表达式对象不太可靠:

/[^a-zA-Z0-9_-.@]/
Chrome允许这样做,但Firefox不理解
.
不是字符范围,就像
a-z
。您可以将
-
移到最末端以避免歧义。最终regexp变为(
i
表示不区分大小写的匹配)


顺便说一下,您的HTML格式有点不正确。您的
单元格未包含在
中,您的
声明也位于一个奇怪的位置。