2009-05-25 4 views

ответ

7

У вас есть два подхода к этому:

  1. проверить «нажатие клавиши» событие. Если пользователь нажимает специальную символьную клавишу, остановите его прямо там
  2. проверьте событие «onblur»: когда элемент ввода теряет фокус, проверьте его содержимое. Если значение недействительно, выведите сдержанное предупреждение рядом с этим полем ввода.

Я предлагаю второй метод, потому что его менее раздражает. Не забудьте также проверить onpaste. Если вы используете только клавиши, то мы можем скопировать и вставить специальные символы, поэтому используйте onpaste также для ограничения вставки специальных символов

Кроме того, я также предлагаю вам пересмотреть, если вы действительно хотите запретить пользователям вводить специальные символы. Потому что многие люди имеют $, #, @ и * в своих паролях.

Я полагаю, что это может быть сделано для предотвращения внедрения SQL; если да: лучше, чтобы вы обрабатывали серверные проверки. Или еще лучше, избегайте значений и храните их в базе данных.

+1

Ограничительный ввод не обязательно ограничительный, возможно, введите номера телефонов, почтовые индексы, даты и т. Д. Но +1 к совету удвоить проверку на стороне сервера! – PhiLho

2

Это поможет вам ... предположить, что у вас есть форма с формой «formname» и текстовое поле с названием «txt». то вы можете использовать следующий код, чтобы разрешить только aphanumeric значения

var checkString = document.formname.txt.value; 
if (checkString != "") { 
    if (/[^A-Za-z\d]/.test(checkString)) { 
     alert("Please enter only letter and numeric characters"); 
     document.formname.txt.focus(); 
     return (false); 
    } 
} 
11

Попробуйте это, эта функция позволяет алфавитно-цифровой и пространства:

function alpha(e) { 
    var k; 
    document.all ? k = e.keyCode : k = e.which; 
    return ((k > 64 && k < 91) || (k > 96 && k < 123) || k == 8 || k == 32 || (k >= 48 && k <= 57)); 
} 

в вашем HTML:

<input type="text" name="name" onkeypress="return alpha(event)"/> 
+0

Почему вы проверяете 'document.all', чтобы определить поддержку' e.keyCode'? Почему бы не проверить 'e.keyCode' вместо этого? – rvighne

+1

Технически вам не нужны скобки для группировки; '&&' имеет приоритет над '||'. – rvighne

6

Для специальных символов:

var iChars = "[email protected]#$%^&*()+=-[]\\\';,./{}|\":<>?"; 

for (var i = 0; i < document.formname.fieldname.value.length; i++) { 
    if (iChars.indexOf(document.formname.fieldname.value.charAt(i)) != -1) { 
     alert ("Your username has special characters. \nThese are not allowed.\n Please remove them and try again."); 
     return false; 
    } 
} 
2

Я думаю, что проверка keypress события не вполне адекватно, так как я считаю, пользователи могут копия/вставка в поля ввода без запуска нажатия клавиши.

So onblur, вероятно, несколько более надежный (но менее непосредственный).

Чтобы действительно убедиться, что символы, которые вы не хотите, не вводятся в поля ввода (или текстовых областей и т.д.), я думаю, вам нужно

  1. проверки keypress (если вы хотите, чтобы дать немедленную обратную связь) и
  2. также проверять onblur,
  3. , а также проверять входные данные на сервере (что является единственным реальным способом убедиться, что в ваши данные не попадают никакие нежелательные данные).

Образцы кода в других ответов будет прекрасно работать для выполнения на стороне клиента проверки (только не полагаться только на проверку keypress события), но, как было указано в принятом ответе сервера действительно требуется проверка на стороне.

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