Regex для исключения некоторых символов из класса, но расширения за счет других, не включенныхPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Regex для исключения некоторых символов из класса, но расширения за счет других, не включенных

Сообщение Anonymous »

Я пытаюсь написать RegEx для генерации случайных строк типа [:graph:], но исключаю некоторые определенные символы, содержащиеся в строке $blacklist (например, некоторые символы могут отсутствовать на клавиатурах определенных языков, и не обязательно все знают коды ASCII или Unicode для их создания), но могут включать в строку $whitelist и другие символы, например пробелы.
Этот код позволяет удалять символы, не принадлежащие [:graph: ] и корректно работает в PHP:

Код: Выделить всё

$secure_password = substr(preg_replace('`[^[:graph:]]+`s', "", random_bytes($length * 10)), 0, $length);
Благодаря regex101.com я понял, как расширить шаблон, исключив любые дополнительные символы, а именно что-то вроде этого:

Код: Выделить всё

#(?:[^[:graph:]]+|[~`]+)#
Хотя в приведенном выше примере символы «~`» содержатся в классе [:graph:], они входят в число тех, которые будут удалены. Я понимаю, что нам нужно будет использовать функцию preg_quote для экранирования разделителей регулярных выражений.
В этом другом коде я попытался расширить набор удаляемых символов:

Код: Выделить всё

$pattern = (empty($blacklist))
? "[^[:graph:]]+"
: "(?:[^[:graph:]]+|[".preg_quote($blacklist, '`')."]+)";

$secure_password = substr(preg_replace($pattern, "", random_bytes($length * 10)), 0, $length);
Но это не работает.
Может кто-нибудь мне помочь? Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/782 ... ot-include
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»