在使用JavaScript验证表单时检查特殊字符(,;)

时间:2015-01-21 11:33:31

标签: javascript forms validation special-characters

我试图在我的(工作)验证脚本上插入这段代码(我在网站上找到的代码):

if (register.username.match(/\W/)) {
    alert('You have special characters on username field.');
    return false;
}

它没有做任何事情,也阻止了整个脚本的工作。

这是html表单(不是全部):

<form name="register" method="POST" action="registar.php" onsubmit="return validateForm();">
    <ul class="left-form">
        <h2>Nova conta:</h2>
        <li>
            <input type="text" name="username" placeholder="Username" required/>
            <div class="clear"> </div>
        </li>
        <li>
            <input type="text" name="email" placeholder="Email" required/>
            <div class="clear"> </div>
        </li>
        <li>
            <input type="password" name="pass" placeholder="Password" required/>
            <div class="clear"> </div>
        </li>
        <li>
            <input type="password" name="pass_confirm" placeholder="Confirmar a password" required/>
            <div class="clear"> </div>
        </li>
        <input type="submit" value="Registar">
        <div class="clear"> </div>
    </ul>
</form>

这是我的Javscript代码(没有特殊字符检查):

function validateForm() {
    if (register.username.value.length <= 2) {
        alert("O username escolhido é demasiado curto.");
        return false;
    }
    if (register.username.value.length > 20) {
        alert("O username escolhido é demasiado longo.");
        return false;
    }
    var x = register.email.value;
    var atpos = x.indexOf("@");
    var dotpos = x.lastIndexOf(".");
    if (atpos < 1 || dotpos < atpos + 2 || dotpos + 2 >= x.length) {
        alert("O email inserido parece ser inválido.");
        return false;
    }
    if (register.username.value == register.pass.value) {
        alert("Por questões de segurança, pedimos que use uma password diferente do seu nome de utilizador.");
        return false;
    }
    if ((register.pass.value.length < 6) || (register.pass.value.length > 20)) {
        alert("Certifique-se que a sua password tem entre 6 e 20 letras.");
        return false;
    }
    if (register.pass.value != register.pass_confirm.value) {
        alert("As passwords não condizem.");
        return false;
    }
    return true;
}

忽略警报,因为它们只是显示消息。

有人可以写一段代码来检查特殊字符(!,。+ *等)或者告诉我我使用的代码有什么问题吗?

1 个答案:

答案 0 :(得分:2)

您可能应该将代码更改为:

if (register.username.value.match(/\W/)) {
   alert('You have special characters on username field.');
   return false;
}

区别是什么?好吧,如果你意识到我在中间加了.value。因为register.username会引用用户名输入元素,并且它没有match方法。我们需要检查输入的文字。通过检查input element reference,您可以意识到我们使用了value属性来返回输入的文本。因此register.username.value是用户输入的文字,因为它是一个字符串,我们可以在其上使用.match method

您现在可以将任何正则表达式传递给满足您需求的匹配方法。同时检查the guide on regex

还要经常检查开发者控制台中显示的错误。