2015-07-17 3 views
1

Я пытаюсь использовать строку в регулярном выражении, чтобы вычеркнуть все символы, кроме букв, цифр, запятых, дефис и подчеркивания.PHP регулярное выражение для удаления всех символов, кроме букв, цифр, запятых, дефис и символов подчеркивания

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

$clean_input = preg_replace("/[^,-\w]+/", "", $input);

Он возвращает это предупреждение в моем журнале PHP

PHP Warning: preg_replace(): Compilation failed: invalid range in character class at offset 5 in [file]...

Раньше я использовал тот же регулярное выражение без характер запятой, который действительно работал (кроме него все же зачищали запятые). Выглядело это так:

$clean_input = preg_replace("/[^-\w]+/", "", $input);

Если вы заканчивали this example я сделал в онлайн-инструменте регулярного выражения тестера он показывает точно такой же набор до меня в моем коде. Он возвращает результат, как я ожидал, за исключением всего, кроме запятых.

Это может вызвать проблему с помощью этого символа запятой. Я попытался убежать от него, но это дало такое же предупреждение. Спасибо за любую помощь Regex-богам!

+0

Если вы хотите удалить все буквы, цифры или запятые, то почему вы помещаете '-' внутри класса char? –

+0

и дефис тоже –

+0

Что относительно символов подчеркивания? –

ответ

1

Просто введите - в начале или в конце, потому что дефис внутри класса char имеет special meaning. а также не забудьте поставить запятую внутри отрицаемого класса символов.

$clean_input = preg_replace("/[^-\w,]/", "", $input); 
+0

Небольшое примечание: * [...] и подчеркивания. * :) – Rizier123

+0

@AvinashRaj Я думаю, вам просто нужно объяснить OP, что '-' имеет особое значение в [классах символов] (http://php.net/manual/en/regexp.reference.character-classes.php) – Rizier123

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