在Ruby中删除“@”符号及其后的所有内容

时间:2011-08-09 19:13:24

标签: ruby regex email-validation

我正在开发一个应用程序,我需要在用户的电子邮件地址“@”之前传递任何内容作为他/她的名字和姓氏。例如,如果用户的电子邮件地址为“user@example.com”,则用户提交表单时,我会从电子邮件中删除“@ example.com”,并将“user”指定为姓名。

我已经完成了研究,但却无法在Ruby中找到这样做的方法。有什么建议??

5 个答案:

答案 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>]