Intereting Posts

Как разрешить пробелы в этом регулярном выражении?

Я такой любитель в 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_ \ -] /