我正在开发一个应用程序,在其中需要将用户电子邮件地址中“@”号前的任何内容作为他/她的名字和姓氏传递。例如,如果用户的电子邮件地址为“user@example.com”,那么当用户提交表单时,我会从电子邮件地址中移除“@example.com”,并将“user”分配为名字和姓氏。
我已经进行了研究,但无法找到在 Ruby 中实现此功能的方法。有什么建议吗?
我正在开发一个应用程序,在其中需要将用户电子邮件地址中“@”号前的任何内容作为他/她的名字和姓氏传递。例如,如果用户的电子邮件地址为“user@example.com”,那么当用户提交表单时,我会从电子邮件地址中移除“@example.com”,并将“user”分配为名字和姓氏。
我已经进行了研究,但无法找到在 Ruby 中实现此功能的方法。有什么建议吗?
你可以使用 "@" 进行分割,然后只使用第一部分。
email.split("@")[0]
这将为您提供“@”之前的第一部分。
在 @ 符号之前捕获 任何内容:
my_string = "user@example.com"
substring = my_string[/[^@]+/]
# => "user"
#split
可能是这种特定情况下更简单的答案--但我认为RegExp并不过于复杂。 - Dylan Markow只需在 @ 符号处进行分割,然后获取它之前的内容。
string.split('@')[0]
String#split
方法会很有用。给定一个字符串和一个参数,它将返回一个数组,将字符串分割成该字符串上的单独元素。因此,如果您有以下内容:e = test@testing.com
e.split("@")
#=> ["test", "testing.com"]
e.split("@")[0]
作为地址的第一部分。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>]
email [0,email.index('@')]
不仅能够轻松超越你所测试的两个解决方案,而且更加明显和直观。通过正则表达式将非子串替换为空字符串来查找子串是最麻烦的解决方案之一。正则表达式并不适用于此情况,你正在误用它。 - user229044@
之前的字符,突然间您正在编写一个用于验证域名的正则表达式。当您试图将正则表达式作为解决每个琐碎问题的答案时,就会发生这种情况。 - user229044