我用Rails 3.1.1,我想認識(可能使用正則表達式),如果一個字符串「包含」 /「是」 /「代表」執行下列操作之一:如何識別字符串「表示」?
- 的電子郵件地址
- 網站URL
- 一些
我想實現的方法,給定一個字符串,返回:
email
如果字符串是一樣的東西[email protected]_provider.org
website
如果字符串是一樣的東西www.web_address.org
number
如果字符串是一樣的東西123
null
否則
這可能嗎?我怎麼能做到這一點?
我用Rails 3.1.1,我想認識(可能使用正則表達式),如果一個字符串「包含」 /「是」 /「代表」執行下列操作之一:如何識別字符串「表示」?
我想實現的方法,給定一個字符串,返回:
email
如果字符串是一樣的東西[email protected]_provider.org
website
如果字符串是一樣的東西www.web_address.org
number
如果字符串是一樣的東西123
null
否則這可能嗎?我怎麼能做到這一點?
下面是一些代碼對你:
def whatami(input)
return :email if input =~ EmailRegex
return :website if input =~ WebsiteRegex
return :number if input =~ NumberRegex
nil
end
你可以看一下個人的正則表達式爲每個個案以上 - 或許你可以找到某些情況下非正則表達式的解決方案。
這絕對有可能。但是,等一下,這裏只是一個用於電子郵件的Perl正則表達式。你確定要繼續這條道路嗎? :-)
/(?(DEFINE)
(?<address> (?&mailbox) | (?&group))
(?<mailbox> (?&name_addr) | (?&addr_spec))
(?<name_addr> (?&display_name)? (?&angle_addr))
(?<angle_addr> (?&CFWS)? < (?&addr_spec) > (?&CFWS)?)
(?<group> (?&display_name) : (?:(?&mailbox_list) | (?&CFWS))? ;
(?&CFWS)?)
(?<display_name> (?&phrase))
(?<mailbox_list> (?&mailbox) (?: , (?&mailbox))*)
(?<addr_spec> (?&local_part) \@ (?&domain))
(?<local_part> (?&dot_atom) | (?"ed_string))
(?<domain> (?&dot_atom) | (?&domain_literal))
(?<domain_literal> (?&CFWS)? \[ (?: (?&FWS)? (?&dcontent))* (?&FWS)?
\] (?&CFWS)?)
(?<dcontent> (?&dtext) | (?"ed_pair))
(?<dtext> (?&NO_WS_CTL) | [\x21-\x5a\x5e-\x7e])
(?<atext> (?&ALPHA) | (?&DIGIT) | [!#\$%&'*+-/=?^_`{|}~])
(?<atom> (?&CFWS)? (?&atext)+ (?&CFWS)?)
(?<dot_atom> (?&CFWS)? (?&dot_atom_text) (?&CFWS)?)
(?<dot_atom_text> (?&atext)+ (?: \. (?&atext)+)*)
(?<text> [\x01-\x09\x0b\x0c\x0e-\x7f])
(?<quoted_pair> \\ (?&text))
(?<qtext> (?&NO_WS_CTL) | [\x21\x23-\x5b\x5d-\x7e])
(?<qcontent> (?&qtext) | (?"ed_pair))
(?<quoted_string> (?&CFWS)? (?&DQUOTE) (?:(?&FWS)? (?&qcontent))*
(?&FWS)? (?&DQUOTE) (?&CFWS)?)
(?<word> (?&atom) | (?"ed_string))
(?<phrase> (?&word)+)
# Folding white space
(?<FWS> (?: (?&WSP)* (?&CRLF))? (?&WSP)+)
(?<ctext> (?&NO_WS_CTL) | [\x21-\x27\x2a-\x5b\x5d-\x7e])
(?<ccontent> (?&ctext) | (?"ed_pair) | (?&comment))
(?<comment> \((?: (?&FWS)? (?&ccontent))* (?&FWS)? \))
(?<CFWS> (?: (?&FWS)? (?&comment))*
(?: (?:(?&FWS)? (?&comment)) | (?&FWS)))
# No whitespace control
(?<NO_WS_CTL> [\x01-\x08\x0b\x0c\x0e-\x1f\x7f])
(?<ALPHA> [A-Za-z])
(?<DIGIT> [0-9])
(?<CRLF> \x0d \x0a)
(?<DQUOTE> ")
(?<WSP> [\x20\x09])
)
(?&address)/x
複製from here。
我認爲這是一個*有效的*電子郵件雖然。更簡單地說,你可以檢查一個@符號,你知道它是一個電子郵件地址,如果沒有(如@ ean5533評論),然後檢查一個字,然後一個數字,然後無。 – iain 2012-01-11 17:17:25
@伊恩:快速和骯髒,是的,可以工作,如果他的應用程序允許這樣輕鬆的檢查:-) – 2012-01-11 17:19:51
我認爲答案是相當明顯的。創建一個測試輸入是否爲電子郵件的函數;如果是的話,返回「郵件」。然後測試一個網站;如果是的話返回網站。然後號碼。最後返回null。您可以通過Google搜索找到每個案例的個別解決方案。 – ean5533 2012-01-11 13:30:16