2017-08-23 1 views
0

Étant donné une adresse e-mail, je voudrais ne laisser que le premier et le dernier deux caractères et entrer 4 astérisques à gauche et à droite du caractère @.Comment remplacer tous les caractères sauf le premier et le dernier avec gsub Ruby

La meilleure façon d'expliquer sont des exemples:

[email protected] changé pour lo****@****om

[email protected] changé fo****@****de

Comment faire avec gsub?

+2

Peut-être que [ce] (https://ideone.com/yquKpO) pourrait Aidez-moi. –

+0

C'est parfait, merci! – bochen421

Répondre

2

** Si vous souhaitez masquer avec un nombre fixe de symboles *, vous pouvez Ysé

'[email protected]'.sub(/\A(..).*@.*(..)\z/, '\1****@****\2') 
# => lo****@****om 

Voir la Ruby demo.

Ici,

  • \A - début de l'ancre de chaîne
  • (..) - Groupe 1: 2 premiers caractères
  • .*@.* - tout 0+ CHARS autres que les caractères de saut de ligne autant que possible jusqu'à la dernier @ suivi d'un autre jeu de caractères 0+ autres que ceux de saut de ligne
  • (..) - Groupe 2: 2 derniers caractères
  • \z - fin de la chaîne.

Le \1 dans la chaîne replacment fait référence à la valeur maintenue dans le groupe 1, et \2 référence à la valeur dans le groupe 2.

Si vous souhaitez masquer les caractères existants tout en gardant leur numéro, vous pourriez envisager une approche pour capturer les parties de la chaîne que vous devez conserver ou traiter et manipuler les captures à l'intérieur d'un bloc sub:

'[email protected]'.sub(/\A(..)(.*)@(.*)(..)\z/) { 
    $1 + "*"*$2.length + "@" + "*"*$3.length + $4 
} 
# => lo*********@*******om 

Voir la Ruby demo

Détails

  • \A - début de la chaîne
  • (..) - Groupe 1 capturant tous les 2 caractères
  • (.*) - Groupe 2 capturant tout autant 0+ caractères que possible jusqu'à la dernière. ...
  • @ - @ char
  • (.*) - Groupe 3 capturant tout autant 0+ caractères que possible jusqu'à la
  • (..) - Groupe 4: deux chars
  • \z - fin de chaîne.

Notez que l'intérieur du bloc, $1 contient la valeur du Groupe 1, Groupe $2 maintient la valeur 2, et ainsi de suite.

1

En utilisant gsub avec anticipation et regarder en arrière: les modèles regex

'[email protected]'.gsub(/(?<=.{2}).*@.*(?=\S{2})/, '****@****') 
=> "lo****@****om" 

En utilisant rubis clair:

str.first(2) + '****@****' + str.last(2) 
=> "lo****@****om"