2009-06-16 7 views
2

У меня есть строка, и я хочу проверить эту строку, чтобы она не содержала определенных символов, таких как '/' '\' '&' ';' и т. д. Как я могу это сделать сразу?Проверка строки Javascript

+2

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

ответ

13

Вы можете решить это с помощью регулярных выражений!

mystring = "hello" 
yourstring = "bad & string" 

validRegEx = /^[^\\\/&]*$/ 

alert(mystring.match(validRegEx)) 
alert(yourstring.match(validRegEx)) 

Соответствие с регулярным выражением возвращает строку, если она в порядке, или null, если ее недействительно!

Объяснение:

  • JavaScript RegEx литералы разграничены, как струны, но с косой черты (/ iS) вместо кавычек (" 'ы).
  • Первый и последний символы validRegEx заставляют его соответствовать всей строке, а не просто части, карат привязывает ее к началу и знак доллара до конца.
  • Часть между скобками ([ и ]) - это класс символов, который соответствует любому символу, пока он находится в классе. Первый символ внутри этого, карат, означает, что класс отрицается, чтобы соответствовать символам, не упомянутым в классе символов. Если он был опущен, класс будет соответствовать указанным им символам.
    • течение следующих двух последовательностей, \\ и \/ являются экранированы обратной наклонной чертой, потому что обратная косая черта сама по себе была бы последовательность для чего-то другого, и слэш бы запутать синтаксический анализатор, думая, что он достиг конца регулярного выражения, (точно похоже на экранирование кавычек в строках).
    • Амперсанд (&) не имеет особого значения и не имеет никакого значения.
  • Оставшийся характер, то Клини звезда (*) означает, что независимо от предваряется она должна быть согласована ноль или более раз, так что класс персонажа будет есть столько символов, которые не вперед или назад слэши или амперсанды, в том числе нет, если он не может найти их. Если вы хотите убедиться, что строка со строкой не была пустой, вы можете заменить ее на плюс (+).
+0

Ummm ... кроме JavaScript regex не имеет функции 'match', а только' test'. –

+0

@LawrenceDol: '.match()' используется в 'String', а не' RegExp'. Что происходит, когда вы это пробовали? – SingleNegationElimination

+0

@ Синг: Хорошо, я пропустил эту тонкость. Здесь вы искали решение с точки зрения регулярного выражения. Благодарю. –

5

Я бы использовал регулярные выражения.

См. this guide с сайта Mozillla.org. Этот article также дает хорошее представление о регулярных выражениях в JavaScript.

3

Here - хорошая статья о проверке Javascript. Помните, что вам также нужно будет проверить на стороне сервера. Проверка Javascript легко обойти, поэтому его никогда не следует использовать по соображениям безопасности, таким как предотвращение атак SQL Injection или XSS.

1

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

function validString(input){ 
    return !(/[\\/&;]/.test(input)); 
} 

validString('test;') //false 
1

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

var myString = "An /invalid &string;"; 
var charList = ['/', '\\', '&', ';']; // etc... 

function sanitize(input, list) { 
    for (char in list) { 
     input = input.replace(char, ''); 
    } 
    return input 
} 

Итак:

sanitize(myString, charList) // returns "An invalid string" 
0

Как другие ответили вы можете решить эту проблему с регулярным выражением, но не забудьте также проверить значение на стороне сервера. Нет гарантии, что пользователь активировал JavaScript. Никогда не доверяйте пользовательскому вводу!

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