2015-01-21 77 views
-1

我试图插入我的(工作)的验证脚本这段代码(我曾在网站上找到):检查特殊字符(;)在验证一个表单的JavaScript

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; 
} 

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

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

+0

请显示表单和名称字段的HTML。 – 2015-01-21 11:35:33

+1

如果我的名字中有这些字符会怎么样? ==> – 2015-01-21 11:35:49

+1

只需抓住您在网站上找到的随机脚本并将其应用到您的代码中,但不理解它所做的并不是成功实现卓越开发的途径。花一些时间了解你工作的语言和环境,并且你可以在睡眠中做出这些改变。在这种情况下,您可能正在寻找[正则表达式](https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions)。 – 2015-01-21 11:37:54

回答

1

你或许应该更改代码这样:

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

也总是检查显示在开发者控制台中的错误。

+0

OP,这个工程! – Elric 2015-01-21 12:39:22

+0

谢谢!诚实地说,我没有注意到缺少'.value',这是一个很大的失败。 – 2015-01-21 12:42:14