Я пытаюсь написать RegEx для генерации случайных строк типа [:graph:], но исключаю некоторые определенные символы, содержащиеся в строке $blacklist (например, некоторые символы могут отсутствовать на клавиатурах определенных языков, и не обязательно все знают коды ASCII или Unicode для их создания), но могут включать в строку $whitelist и другие символы, например пробелы.
Этот код позволяет удалять символы, не принадлежащие [:graph: ] и корректно работает в PHP:
Код: Выделить всё
$secure_password = substr(preg_replace('`[^[:graph:]]+`s', "", random_bytes($length * 10)), 0, $length);
Благодаря regex101.com я понял, как расширить шаблон, исключив любые дополнительные символы, а именно что-то вроде этого:
Хотя в приведенном выше примере символы «~`» содержатся в классе [: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