Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何识别什么是字符串;代表“;?_Ruby On Rails_Ruby_Regex_Ruby On Rails 3_String - Fatal编程技术网

Ruby on rails 如何识别什么是字符串;代表“;?

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)

我使用的是Rails 3.1.1,我想识别(可能使用正则表达式)字符串“包含”/“是”/“表示”以下内容之一:

  • 电子邮件地址
  • 网站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) | (?&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