Ответ 1
Чтобы поймать что-либо перед знаком @:
my_string = "[email protected]"
substring = my_string[/[^@]+/]
# => "user"
Я работаю над приложением, где мне нужно передать что-либо перед знаком "@" с адреса электронной почты пользователя в качестве его/ее имени и фамилии. Например, если у пользователя есть адрес электронной почты "[email protected]", чем когда пользователь отправляет форму, я удаляю "@example.com" из письма и назначаю "пользователь" в качестве имени и фамилии.
Я сделал исследование, но не смог найти способ сделать это в Ruby. Любые предложения?
Чтобы поймать что-либо перед знаком @:
my_string = "[email protected]"
substring = my_string[/[^@]+/]
# => "user"
Вы можете разделить на "@" и просто использовать первую часть.
email.split("@")[0]
Это даст вам первую часть перед "@".
Просто разделите символ @и возьмите то, что было до него.
string.split('@')[0]
String#split
будет полезен. Учитывая строку и аргумент, он возвращает массив, разделяющий строку на отдельные элементы этой строки. Итак, если у вас есть:
e = [email protected]
e.split("@")
#=> ["test", "testing.com"]
Таким образом, вы берете e.split("@")[0]
для первой части адреса.
используйте 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>]