Ruby on rails 如何识别什么是字符串;代表“;?
我使用的是Rails 3.1.1,我想识别(可能使用正则表达式)字符串“包含”/“是”/“表示”以下内容之一:Ruby on rails 如何识别什么是字符串;代表“;?,ruby-on-rails,ruby,regex,ruby-on-rails-3,string,Ruby On Rails,Ruby,Regex,Ruby On Rails 3,String,我使用的是Rails 3.1.1,我想识别(可能使用正则表达式)字符串“包含”/“是”/“表示”以下内容之一: 电子邮件地址 网站URL 数 我正在尝试实现一个方法,给定一个字符串,该方法将返回: email如果字符串类似于my_nick@email_provider.org website如果字符串类似于www.web\u address.org number如果字符串类似于123 null否则 可能吗?我怎样才能做到这一点呢?以下是一些代码: def whatami(input)
- 电子邮件地址
- 网站URL
- 数
如果字符串类似于email
my_nick@email_provider.org
如果字符串类似于website
www.web\u 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正则表达式。确实要在此路径上继续吗?:-)
/(?(定义)
(?。我认为答案相当明显。创建一个函数,测试输入是否是电子邮件;如果是,返回“电子邮件”。然后测试一个网站;如果是,返回网站。然后编号。最后返回null。你可以通过谷歌搜索找到每种情况的单独解决方案。我认为这是一封有效的电子邮件。更简单地说,你可以检查@符号,你知道它是一个电子邮件地址,如果不是(如@ean5533评论)然后检查一个单词,然后是一个数字,然后是零。@Iain:快速和肮脏,是的,可以工作,如果他的应用程序允许这样轻松的检查:-)
/(?(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