php - заменить случайный текст ПОСЛЕ регулярного выражения внутри строки

0

Я унаследовал этот скрипт, где некоторая конфиденциальная информация хранится в базе данных... и я хочу заменить его на ********, прежде чем он будет сохранен и представлен в журнале.

Я использую PHP... и конфиденциальная информация представляет собой произвольно сгенерированный набор символов, например: "yYng6Ytzh" (не включая "кавычки", но иногда он также может включать в себя! И @)

Он всегда следует за регулярным выражением "Пароль:" (опять без кавычек), например: Пароль: yYng6Ytzh и окружен другим текстом, хранящимся в одной строке.

Я пробовал всевозможные комбинации preg_match, preg_replace, включая str_replace со смещением, но я никуда не уйду... (я просто помогаю кому-то), обычно я могу найти то, что я ищу, чтобы сделать паутина и путаница, но я отнюдь не полноценный программист php, и этот меня насторожил. Может ли кто-нибудь указать мне в правильном направлении, пожалуйста?

  • 1
    Могут ли пароли содержать пробелы в них? Если так, что является разделителем? Вы можете просто не делать замену и просто делать $strToLog .= "Password: ********";
  • 1
    Опубликовать несколько примеров
Показать ещё 3 комментария
Теги:

2 ответа

1
Лучший ответ

Вы можете совместить пароль, а затем использовать внешний вид, чтобы проверить, что перед ним " Password: ":

/(?<=Password:)\s*[a-zA-Z0-9!@]+/

Изменение: мне пришлось переместить квантификатор за пределы внешнего вида. Это означает, что перед тем, как использовать его, вам нужно закончить матч.

Вы также можете сопоставить его с помощью именованной группы. Это немного чище, имо.

/(?<=Password:)\s*(?P<password>[a-zA-Z0-9!@]+)/
  • 0
    «Вид сзади должен быть нулевой ширины, поэтому квантификаторы не допускаются»
  • 0
    @ Ah Да, ты прав. Переместил квантификатор за пределы оглядки.
Показать ещё 3 комментария
0

Вы можете попробовать это решение:

$string = preg_replace_callback('#(?<=Password: )([^ ]+)#', function($match) {
                                                                return str_repeat('*', strlen($match[1]));
                                                            }, 'Password: yYng6Ytzh');

var_dump($string);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню