РЕГУЛЯРНОЕ ВЫРАЖЕНИЕ для маскировки всех символов, кроме первого и последнего символа

#php #regex

#php #регулярное выражение

Вопрос:

Я хочу замаскировать все символы строки, кроме первого и последнего символа. Я пробовал что-то вроде этого:

 <?php
$count = 0;
$string='asdfbASDF1234';
echo preg_replace('/(?!^)S/', '*', $string, -1 , $count);
?>
  

Оно маскирует все символы, кроме первого. Какое правильное регулярное выражение для этого?

Ответ №1:

Почему бы не использовать str_repeat() ?

 $length = strlen($in); 
$out = $in[0] . str_repeat('*', $length - 2) . $in[$length-1]; 
  

Комментарии:

1. 1 В несколько сотен раз быстрее, чем у меня, учитывая достаточно длинную строку.

2. убедитесь, что длина строки должна составлять не менее 2 символов. @denis

Ответ №2:

Это то регулярное выражение, которое вы хотите:

 $string='asdfbASDF1234';
echo $string."n";
echo preg_replace('/(?!^.?).(?!.{0}$)/', '*', $string);
  

Комментарии:

1. Этот ответ отмечен как правильный, потому что он напрямую связан с вопросом. Но альтернативный ответ, предоставленный Денисом, также является хорошим вариантом.

2. Таким образом, оно заменяет все, кроме первого, для меня, вот так: /(?!^.?).(?!.?$)/ сохраняет последний

Ответ №3:

любой, кто ищет маскировку всех букв, но перед каждым словом в данном предложении:

    function maskele($in){
$kelimeler=explode(" ",$in);
$isim=null;
foreach ($kelimeler as $kelime){
$length = strlen($kelime);
$out = $kelime[0] . str_repeat('*', $length - 1) ; 
$isim.=$out. " ";
}
return $isim;

}
  

Комментарии:

1. Это не то, что задавал вопрос, это то, что вопрос уже имел и не хотел .