2015-11-12 3 views
0

Я использую PHP preg_match(), чтобы проверить список регулярных выражений. Функция проверяет буквенно-цифровые, пробелы, символы подчеркивания, тире, звездочку и знак вопроса. Но он принимает все вышеперечисленное, кроме вопросительного знака и звездочки.Разрешение вопросительного знака с буквенно-цифровыми и пробелами с другими символами в regex

return (bool) preg_match('/^[a-z0-9 _-]+$/i', $str); 
+0

Подсказка: Вы можете проверить регулярные выражения [здесь] (http://www.regexr.com/). –

ответ

0

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

return (bool) preg_match('/^[a-z0-9 _-\?\*]+$/i', $str); 
+1

Здесь '-' нужно экранировать или перемещать в начало/конец класса символов. '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''. – chris85

2

Функция проверки на буквенно-цифровой, пробелы, подчеркивания, тире, Астерикс и знак вопроса, но он принимает все выше только кроме вопросительного знака и Астерикс

Поскольку нет ? или * в вашем character class. Попробуйте

return (bool) preg_match('/^[\w*? -]+$/', $str); 

\w уже содержит [A-Za-z0-9_]

See demo at regex101

+1

Это правильная строка регулярных выражений для этой задачи, если строка для проверки содержит только буквы ASCII. Но следует учитывать, что '\ w' соответствует любой букве в соответствии со спецификацией Unicode, а не только' A-Za-z'. Таким образом, он совпадает с немецким 'ÄÖÜäöüß' и любым другим символом слова с любого языка. – Mofi

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