2012-01-11 96 views
0

我用Rails 3.1.1,我想認識(可能使用正則表達式),如果一個字符串「包含」 /「是」 /「代表」執行下列操作之一:如何識別字符串「表示」?

  • 的電子郵件地址
  • 網站URL
  • 一些

我想實現的方法,給定一個字符串,返回:

  • email如果字符串是一樣的東西[email protected]_provider.org
  • website如果字符串是一樣的東西www.web_address.org
  • number如果字符串是一樣的東西123
  • null否則

這可能嗎?我怎麼能做到這一點?

+2

我認爲答案是相當明顯的。創建一個測試輸入是否爲電子郵件的函數;如果是的話,返回「郵件」。然後測試一個網站;如果是的話返回網站。然後號碼。最後返回null。您可以通過Google搜索找到每個案例的個別解決方案。 – ean5533 2012-01-11 13:30:16

回答

1

下面是一些代碼對你:

def whatami(input) 
    return :email if input =~ EmailRegex 
    return :website if input =~ WebsiteRegex 
    return :number if input =~ NumberRegex 
    nil 
end 

你可以看一下個人的正則表達式爲每個個案以上 - 或許你可以找到某些情況下非正則表達式的解決方案。

1

這絕對有可能。但是,等一下,這裏只是一個用於電子郵件的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) | (?&quoted_string)) 
    (?<domain>   (?&dot_atom) | (?&domain_literal)) 
    (?<domain_literal> (?&CFWS)? \[ (?: (?&FWS)? (?&dcontent))* (?&FWS)? 
           \] (?&CFWS)?) 
    (?<dcontent>  (?&dtext) | (?&quoted_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) | (?&quoted_pair)) 
    (?<quoted_string> (?&CFWS)? (?&DQUOTE) (?:(?&FWS)? (?&qcontent))* 
         (?&FWS)? (?&DQUOTE) (?&CFWS)?) 

    (?<word>   (?&atom) | (?&quoted_string)) 
    (?<phrase>   (?&word)+) 

    # Folding white space 
    (?<FWS>    (?: (?&WSP)* (?&CRLF))? (?&WSP)+) 
    (?<ctext>   (?&NO_WS_CTL) | [\x21-\x27\x2a-\x5b\x5d-\x7e]) 
    (?<ccontent>  (?&ctext) | (?&quoted_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

+0

我認爲這是一個*有效的*電子郵件雖然。更簡單地說,你可以檢查一個@符號,你知道它是一個電子郵件地址,如果沒有(如@ ean5533評論),然後檢查一個字,然後一個數字,然後無。 – iain 2012-01-11 17:17:25

+0

@伊恩:快速和骯髒,是的,可以工作,如果他的應用程序允許這樣輕鬆的檢查:-) – 2012-01-11 17:19:51