Как разрешать только альфа-числовые символы с JavaScript

Играя с JavaScript, и то, что я пытаюсь сделать, это разрешить определенные символы в поле pass word - a-z, A-Z и 0-9.

<form action="http://www.cknuckles.com/cgi/echo.cgi" method="get" name="logOn">
  User Name:<br />
  <input type="text" name="userName" size="25" /><br />
  Password:<br />
  <input type="password" name="pw" size="25" /><br />
  <input type="submit" value="Log In" onClick="validate()"/> 
</form>

Выше мой HTML, и ниже мой JavaScript, который я пытался использовать для его проверки, но он не работает - никаких подсказок.

<script language="javascript">
   document.logOn.onsubmit=validate;

   function validate(){

var name=document.logOn.pw.value;
    if(!name = "[a-zA-Z0-9]"){              
alert("Your Password Cant Have Any Funky Things In It - Play It Straight!");
    return false;
}               

    return true;
}
</script>

Но это не работает. Я все еще могу помещать символы как "*" и "[" и "{" и т.д.

Любые мысли?

Ответ 1

Вам нужно сделать тест состояния регулярным выражением, а не строкой:

if(!/^[a-zA-Z0-9]+$/.test(name)){ ...

значение:

  • ^ - начало строки
  • [a-zA-Z0-9]+ - один или несколько символов/чисел
  • $ - конец строки

или вы можете найти обратный код, который является "любым неприемлемым символом":

if(/[^a-zA-Z0-9]/.test(name)){

Ответ 2

if (name.match(/[\W_]/)) { //...

Значение, если строка "name" имеет любой символ, который не является буквенно-цифровым или подчеркиванием, тогда выполните блок. Обратите внимание, что мы должны отдельно проверить для подчеркивания (_), потому что алфавитно-цифровой класс символов (\w) включает в себя знак подчеркивания (поэтому отрицательный класс (\w)).