2013-03-06 3 views
3

Вот скрипку, чтобы начать - http://jsfiddle.net/zuVpx/1/ кодJavascript регулярное выражение, чтобы запретить все специальные символы

Javascript:

<script> 
    function validate(e) { 
     var regex = new RegExp("[a-zA-Z0-9]"); 
     var key = e.keyCode || e.which; 
     key = String.fromCharCode(key); 

     if(!regex.test(key)) { 
      e.returnValue = false; 
      if(e.preventDefault) { 
       e.preventDefault(); 
      } 
     } 
    } 
</script> 

HTML код:

<input type="text" onkeypress="validate(event)" /> 

Я хочу только символы и числа. Ключи, такие как backspace, delete, capslock и стрелки и т. Д., Должны работать.

Заранее спасибо.

+0

взгляните на это http://stackoverflow.com/questions/995183/how-to-allow-only-numeric-0-9-in-html-inputbox-using-jquery – Kotzilla

ответ

5

Добавить id на вход (например, 'Подтвердить') и использование:

document.querySelector('#validate').onkeypress = validate; 

function validate(e) { 
     e = e || event; 
     return /[a-z0-9]/i.test(
        String.fromCharCode(e.charCode || e.keyCode) 
       ) || !e.charCode && e.keyCode < 48; 
} 

JSFiddle

+0

Это не работает в mozilla , – Ashwin

+0

Действительно? Тогда она должна быть старой версией Mozilla. Работает в Firefox 19.0 здесь, даже в IE8. Попробуйте использовать 'document.getElementById ('validate')' вместо 'document.querySelector 'или обновить браузер. – KooiInc

+0

Я определил проблему. Проблема keyCode -> 35 - 40 повторяется для ключей (дома, конца и т. Д.), Например, # и «конец» имеют код 35. По крайней мере, здесь, в моей Mozilla 16;). – Ashwin

1

Как насчет использования только дополнительного предложения? Что-то вроде ...

key.charCodeAt(0) > 32 

Итак ...

function validate(e) { 
    var regex = new RegExp("[a-zA-Z0-9]"); 
    var key = e.keyCode || e.which; 
    key = String.fromCharCode(key); 

    if(!regex.test(key) && key.charCodeAt(0) > 32) { 
     e.returnValue = false; 
     if(e.preventDefault) { 
      e.preventDefault(); 
     } 
    } 
} 
0

Чтобы преодолеть проблему, например, клавиша со стрелкой влево создает то же значение key, что иключ, вы можете использовать

function validate(e) { 
    e = e || window.event; 
    var bad = /[^\sa-z\d]/i, 
     key = String.fromCharCode(e.keyCode || e.which); 

    if (e.which !== 0 && e.charCode !== 0 && bad.test(key)) { 
     e.returnValue = false; 
     if (e.preventDefault) { 
      e.preventDefault(); 
     } 
    } 
} 

Любой печатаемый символ должен произвести ненулевое значение e.which и e.charCode.
См. JavaScript Madness: Keyboard Events.

jsFiddle.

Вышеприведенные предположения, что пробелы действительны - если нет, просто удалите \s из класса символов с отрицанием.

2

Попробуйте

/[-!$%^&*()_+|~=`\\#{}\[\]:";'<>?,.\/]/.test(your_variable) 

возвращает истину, если есть совпадение.

Смежные вопросы