Убрать знак "@" и все после него в Ruby - PullRequest
23 голосов
/ 09 августа 2011

Я работаю над приложением, в котором мне нужно передать что-нибудь перед знаком "@" с адреса электронной почты пользователя в качестве его / ее имени и фамилии.Например, если у пользователя есть адрес электронной почты «user@example.com», тогда, когда пользователь отправляет форму, я удаляю «@ example.com» из электронного письма и назначаю «пользователя» в качестве имени и фамилии.

Я провел исследование, но не смог найти способ сделать это в Ruby.Любые предложения ??

Ответы [ 5 ]

46 голосов
/ 09 августа 2011

Чтобы поймать что-нибудь перед знаком @:

my_string = "user@example.com"
substring = my_string[/[^@]+/]
# => "user"
45 голосов
/ 09 августа 2011

Вы можете разделить на «@» и просто использовать первую часть.

email.split("@")[0]

Это даст вам первую часть перед «@».

10 голосов
/ 09 августа 2011

Просто разделите символ @ и возьмите то, что было до него.

string.split('@')[0]
8 голосов
/ 09 августа 2011

String#split будет полезно. Учитывая строку и аргумент, он возвращает массив, разбивающий строку на отдельные элементы в этой строке. Так что, если у вас было:

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

Таким образом, вы бы взяли e.split("@")[0] в качестве первой части адреса.

1 голос
/ 09 августа 2011

используйте gsub и регулярное выражение

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>]
...