Регулярное выражение соответствует больше чем разрешенным - PullRequest
2 голосов
/ 24 октября 2011

Я пытаюсь проверить, что данная строка содержит только буквы, цифры, пробелы и символы из набора символов (!-?():&,;+). Вот что у меня пока так:

/^[a-zA-Z0-9 !-?\(\):&,;\+]+$/

Теперь это работает несколько, но принимает и другие символы. Например, строки, содержащие * или #, проверяются. Я думал, что ^ в начале выражения и $ в конце означают, что оно будет соответствовать всей строке. Что я делаю не так?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 24 октября 2011
/^[a-zA-Z0-9 !-?\(\):&,;\+]+$/

- не приятно, где вы его разместили!Если вы хотите поместить - внутри класса символов, обязательно поместите его первый или последний например

/^[a-zA-Z0-9 !?\(\):&,;\+-]+$/

В противном случае он будет принимать диапазондо тех пор ?каким бы ни был этот диапазон ... Зависит от вашей машины регулярных выражений.

Наконец, специальные символы не являются специальными внутри классов символов.Поэтому не нужно спасаться от большинства из них:

/^[a-zA-Z0-9 !?():&,;+-]+$/
2 голосов
/ 24 октября 2011

Вы указали «диапазон» в своем классе персонажей:

[!-?]

Означает все символы ASCII от ! до ?
http://www.regular -expressions.info /charclass.html

Вы должны экранировать минус - с обратной косой чертой \.(OTOH обратный слеш избыточен перед + и ( и ) в классе символов.)

...