Я унаследовал этот скрипт, где некоторая конфиденциальная информация хранится в базе данных... и я хочу заменить его на ********, прежде чем он будет сохранен и представлен в журнале.
Я использую PHP... и конфиденциальная информация представляет собой произвольно сгенерированный набор символов, например: "yYng6Ytzh" (не включая "кавычки", но иногда он также может включать в себя! И @)
Он всегда следует за регулярным выражением "Пароль:" (опять без кавычек), например: Пароль: yYng6Ytzh и окружен другим текстом, хранящимся в одной строке.
Я пробовал всевозможные комбинации preg_match, preg_replace, включая str_replace со смещением, но я никуда не уйду... (я просто помогаю кому-то), обычно я могу найти то, что я ищу, чтобы сделать паутина и путаница, но я отнюдь не полноценный программист php, и этот меня насторожил. Может ли кто-нибудь указать мне в правильном направлении, пожалуйста?
Вы можете совместить пароль, а затем использовать внешний вид, чтобы проверить, что перед ним " Password:
":
/(?<=Password:)\s*[a-zA-Z0-9!@]+/
Изменение: мне пришлось переместить квантификатор за пределы внешнего вида. Это означает, что перед тем, как использовать его, вам нужно закончить матч.
Вы также можете сопоставить его с помощью именованной группы. Это немного чище, имо.
/(?<=Password:)\s*(?P<password>[a-zA-Z0-9!@]+)/
Вы можете попробовать это решение:
$string = preg_replace_callback('#(?<=Password: )([^ ]+)#', function($match) {
return str_repeat('*', strlen($match[1]));
}, 'Password: yYng6Ytzh');
var_dump($string);
$strToLog .= "Password: ********";