我正在开发一个应用程序,我需要在用户的电子邮件地址“@”之前传递任何内容作为他/她的名字和姓氏。例如,如果用户的电子邮件地址为“user@example.com”,则用户提交表单时,我会从电子邮件中删除“@ example.com”,并将“user”指定为姓名。
我已经完成了研究,但却无法在Ruby中找到这样做的方法。有什么建议??
答案 0 :(得分:46)
在@符号之前捕捉任何:
my_string = "user@example.com"
substring = my_string[/[^@]+/]
# => "user"
答案 1 :(得分:44)
您可以拆分“@”并使用第一部分。
email.split("@")[0]
这将为您提供“@”之前的第一部分。
答案 2 :(得分:10)
只需在@符号处拆分并抓住前面的内容。
string.split('@')[0]
答案 3 :(得分:8)
String#split
会很有用。给定一个字符串和一个参数,它返回一个数组,将该字符串拆分为该String上的单独元素。所以如果你有:
e = test@testing.com
e.split("@")
#=> ["test", "testing.com"]
因此,您将e.split("@")[0]
作为地址的第一部分。
答案 4 :(得分:1)
使用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>]