Подтвердить что ты не робот

Удалите знак "@" и все после него в Ruby

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

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

4b9b3361

Ответ 1

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

my_string = "[email protected]"
substring = my_string[/[^@]+/]
# => "user"

Ответ 2

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

email.split("@")[0]

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

Ответ 3

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

string.split('@')[0]

Ответ 4

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

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

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

Ответ 5

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

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



irb(main):011:0> Benchmark.bmbm do |x|
irb(main):012:1* email = "[email protected]"
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>]