Я такой любитель в regex, как мне разрешить пробелы (неважно, сколько) в этом регулярном выражении?
if(preg_match('/[^A-Za-z0-9_-]/', $str)) return FALSE;
if(preg_match('/[^A-Za-z0-9_ -]/', $str)) return FALSE;
Обратите внимание, что я помещаю пространство перед дефисом. Если бы пространство было после дефиса, я бы указал диапазон символов от подчеркивания до места. (Проблема также может быть устранена путем установки обратного слэша перед дефисом, чтобы избежать его.)
Это предполагает, что вы подразумеваете под «allow»: это регулярное выражение используется для проверки символьной строки, и если оно соответствует , то символьная строка запрещена (следовательно, return FALSE
). Таким образом, символы отрицательного символьного класса ( [^...]
) на самом деле являются допустимыми символами. (Это вызывает некоторую общую путаницу в этом вопросе.)
\s
в регулярном выражении, подобном этому '/[^A-Za-z0-9_-\s]/'
означает пространство
Не так много ответа на ваш вопрос, но сайт, который я считаю полезным для проверки выражений регулярных выражений . Он также объясняет, что каждая часть выражения делает / означает, когда вы наводите на него курсор в поле ввода.
Ваш вопрос непонятен. Регулярное выражение, как оно есть, будет успешным, если $str
имеет в нем какой-либо символ, который не является A-Za-z0-9_-
. Поскольку пространство не является одним из этих символов, регулярное выражение будет соответствовать, и весь оператор возвращает FALSE
.
Если это не то, что вы хотите, и вы хотите, чтобы ваше регулярное выражение соответствовало, если $str
имеет любой символ, который не находится в A-Za-z0-9_-
или пробел, то вам нужно изменить его на A-Za-z0-9_ -
(обратите внимание на пробел между подчеркиванием и дефис). Таким образом, когда ваша строка имеет символ, который не является A-Za-z0-9_ -
, регулярное выражение будет соответствовать, и ваш оператор вернет FALSE
. Если ваша строка полностью состоит из A-Za-z0-9_ -
, то регулярное выражение не будет соответствовать, и ваша обработка будет продолжена до следующей строки.
Изменить: Вот пример: если ваша строка – abc123def
, в настоящее время регулярное выражение не будет соответствовать, и вы не abc123def
FALSE
. Если ваша строка – abc123 def
, регулярное выражение будет соответствовать, и оператор вернет FALSE
. Если вы измените класс символов на A-Za-z0-9_ -
, то регулярное выражение не будет соответствовать как для abc123def
и для abc123def
abc123 def
, и вы не abc123def
FALSE
.
Если вам нужно ДОПУСКАТЬ только пробела, вам понадобится '/ /'
Если вам нужно ПОЗВОЛЯТЬ любой символ пробела (пробел, табуляция, новая строка) – используйте '/ \ s /'
И если вам нужно добавить пробел к вашему шаблону (означает игнорировать пространство) – используйте / [^ A-Za-z0-9_ \ -] /