Question Supprimer le signe "@" et tout ce qui suit dans Ruby


Je travaille sur une application où je dois transmettre le mot "@" à partir de l'adresse e-mail de l'utilisateur en tant que prénom et nom de famille. Par exemple, si l'utilisateur a une adresse électronique "utilisateur@exemple.com" plutôt que l'utilisateur soumet le formulaire, je supprime "@ exemple.com" de l'e-mail et j'attribue "utilisateur" comme prénom et nom.

J'ai fait des recherches mais je n'ai pas réussi à trouver un moyen de le faire en Ruby. Aucune suggestion ??


22
2017-08-09 19:13


origine


Réponses:


Attraper n'importe quoi avant le signe @:

my_string = "user@example.com"
substring = my_string[/[^@]+/]
# => "user"

44
2017-08-09 19:17



Vous pouvez diviser sur "@" et simplement utiliser la première partie.

email.split("@")[0]

Cela vous donnera la première partie avant le "@".


42
2017-08-09 19:16



Il suffit de diviser au symbole @ et de saisir ce qui s'est passé avant.

string.split('@')[0]

10
2017-08-09 19:16



le String#split Sera utile. Étant donné une chaîne et un argument, il retourne un tableau divisant la chaîne en éléments séparés sur cette chaîne. Donc, si vous aviez:

e = test@testing.com
e.split("@")
 #=> ["test", "testing.com"]

Ainsi tu prendrais e.split("@")[0] pour la première partie de l'adresse.


8
2017-08-09 19:19



utiliser gsub et une expression régulière

first_name = email.gsub(/@[^\s]+/,"")



irb(main):011:0> Benchmark.bmbm do |x|
irb(main):012:1* email = "user@domain.type"
irb(main):013:1> x.report("split"){100.times{|n| first_name = email.split("@")[0]}}
irb(main):014:1> x.report("regex"){100.times{|n| first_name = email.gsub(/@[a-z.]+/,"")}}
irb(main):015:1> end
Rehearsal -----------------------------------------
split   0.000000   0.000000   0.000000 (  0.000000)
regex   0.000000   0.000000   0.000000 (  0.001000)
-------------------------------- total: 0.000000sec

            user     system      total        real
split   0.000000   0.000000   0.000000 (  0.001000)
regex   0.000000   0.000000   0.000000 (  0.000000)
=> [#<Benchmark::Tms:0x490b810 @label="", @stime=0.0, @real=0.00100016593933105, @utime=0.0, @cstime=0.0, @total=0.0, @cutime=0.0>, #<Benchmark::Tms:0x4910bb0 @
label="", @stime=0.0, @real=0.0, @utime=0.0, @cstime=0.0, @total=0.0, @cutime=0.0>]

1
2017-08-09 19:15