2011-08-09 54 views
20

我正在處理一個應用程序,在該應用程序中,我需要將用戶電子郵件地址中的「@」符號之前的任何內容作爲他/她的名字和姓氏傳遞。例如,如果用戶的電子郵件地址爲「[email protected]」,那麼當用戶提交表單時,我會從電子郵件中刪除「@ example.com」,並將「user」指定爲姓和名。在Ruby中刪除「@」符號及其後的所有內容

我已經完成了研究,但無法在Ruby中找到這樣做的方法。有什麼建議麼 ??

+0

你爲什麼使用正則表達式呢? http://stackoverflow.com/questions/201323/what-is-the-best-regular-expression-for-validating-email-addresses –

回答

41

爲了趕上什麼 @符號之前:

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

RegEx的+1。爲您提供更多功能,並幫助您避免引用文字索引位置的危險習慣。 – Ishpeck

+5

@Ishpeck:你需要多少多功能?你在@符號處以字符串分割。這不是一個特別不穩定的任務,並且將整個Regexp FSM的複雜性添加到混合中似乎並沒有那麼簡單。 – Chuck

+0

您可以使用正則表達式來清理數據庫中的數據,例如查詢。 http://xkcd.com/327/ – Ishpeck

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>] 
+0

人們很容易去正則表達式。他們不應該成爲你分割字符串的首選。 – meagar

+0

你可能想看看我添加的基準,注意最後的答案不是彩排。假設正則表達式引擎已經啓動,速度更快。 –

+0

我應該補充說,沒有理由優化這樣的語句,除非它處於循環中。網絡延遲比解析/驗證參數的方法要重要得多。自從您發佈一條廣義的說教評論以來,我只是想表達意見。 –

10

在@符號就拆搶前了什麼。

string.split('@')[0] 
40

您可以在「@」上分割並使用第一部分。

email.split("@")[0] 

這會給你在「@」之前的第一部分。

8

String#split將是有益的。給定一個字符串和一個參數,它會返回一個數組,將該字符串分割成該String中的單獨元素。所以,如果你有:

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

因此你會採取e.split("@")[0]爲地址的第一部分。

相關問題