2012-04-07 6 views
4

У меня есть сценарий, который я пытаюсь получить. В основном, я пытаюсь запретить кому-либо вводить специальные символы в поле.Функция indexOf() для возврата значения -1

функция у меня есть выглядит следующим образом:

var iChars = "[email protected]#$%^&*()+=[];,./{}|<>?;"; 
if (field1.value.indexOf(iChars) !=-1) 

    { 
    alert ("problem") 
    } 

Проблема у меня в том, что поле поиска для точного совпадения с вар iChars вместо соответствия какого-либо одного значения. Например, если я создаю var test = «one» и введите «one» в поле, он возвращается с ошибкой, но если я введу «o» в поле, он ничего не вернет и просто перейдет к следующему часть скрипта, но если я введу «none» или «oneeee», это приведет к ошибке.

Любая помощь по исправлению этого вопроса? Я попытался изучить массивы для indexOf, но на самом деле не понял, поэтому, если вы собираетесь предложить, вы можете объяснить это как можно подробнее.

Благодаря

ответ

3

Вы можете использовать ...

var value = field1.value; 

for (var i = 0, length = value.length; i < length; i++) { 
    if (iChars.indexOf(value.charAt(i)) != -1) { 
     alert('Problem!'); 
     break; 
    } 
} 
+0

Это отлично работает, но есть ли способ ограничить количество предупреждений только одним? Если я положил !! я получу два предупреждения, могу ли я его подавить? – Umeed

+1

@Umeed 'break' должен ограничивать это одним предупреждением. – alex

+0

Спасибо, я забыл перерыв! – Umeed

3

Проблема вы ищете индекс всей iChars строки на входе пользователя. То, что вы на самом деле хотите сделать, это увидеть, есть ли какой-либо символ в iChars во входной строке. Для этого используйте for петлю

var iChars = "[email protected]#$%^&*()+=[];,./{}|<>?;"; 
var i; 
for (i = 0; i < iChars.length; i++) { 
    if (field1.value.indexOf(iChars[i]) !== -1) { 
    alert("problem"); 
    break; 
    } 
} 
3

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

var iChars = /[[email protected]#$%^&*()+=[\];,./{}|<>?;]/; 
if (iChars.test(field1.value)) { 
    alert("problem"); 
} 

Этот маршрут должен быть немного более эффективным, чем итерация каждого символа в строке себя, и к обученному регулярному глазу глазу (или, по крайней мере, по моему явно предвзятому мнению), проще читать.

+0

+1 лучший ответ ИМО. веселит. – Craig

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