Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.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
Javascript RFC822咖啡脚本,每行少于80个字符_Javascript_Regex_Coffeescript - Fatal编程技术网

Javascript RFC822咖啡脚本,每行少于80个字符

Javascript RFC822咖啡脚本,每行少于80个字符,javascript,regex,coffeescript,Javascript,Regex,Coffeescript,这是可行的,但它没有通过我的“最大行长度”测试,只有79个字符,因此我一直在尝试使用coffeescript.org上的示例将其减少到少于80个字符(实际上最多74个字符): validate_email = ( email ) -> (/^([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x22([^\x0d\x22\x5c\x80-\xff]|\x5c[\x00-\x7f])*\x22)(

这是可行的,但它没有通过我的“最大行长度”测试,只有79个字符,因此我一直在尝试使用coffeescript.org上的示例将其减少到少于80个字符(实际上最多74个字符):

validate_email = ( email ) ->
   (/^([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x22([^\x0d\x22\x5c\x80-\xff]|\x5c[\x00-\x7f])*\x22)(\x2e([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x22([^\x0d\x22\x5c\x80-\xff]|\x5c[\x00-\x7f])*\x22))*\x40([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x5b([^\x0d\x5b-\x5d\x80-\xff]|\x5c[\x00-\x7f])*\x5d)(\x2e([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x5b([^\x0d\x5b-\x5d\x80-\xff]|\x5c[\x00-\x7f])*\x5d))*$/).test email
虽然编译得很好,但它不起作用。它总是返回false

我该怎么做

我该怎么做

你不知道-正则表达式不适合解析电子邮件地址

任何这样的regexp都注定要失败,因为现在存在的域名几乎打破了他们通常做出的所有假设,例如:

  • 长ASCII TLD(我见过regexp,如果TLD超过4个字符,它会发出barf)
  • 不使用美国ASCII码的国际域(IDN)
也就是说,使用交互式Coffeescript解释器,我只需调整几个字符,就可以得到:

RFC822 = /// ^ (
  ([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+
  | \x22([^\x0d\x22\x5c\x80-\xff]
  | \x5c[\x00-\x7f])*\x22)(\x2e([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a
  -\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+
  | \x22([^\x0d\x22\x5c\x80-\xff]
  | \x5c[\x00-\x7f])*\x22))*\x40([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a
  -\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+
  | \x5b([^\x0d\x5b-\x5d\x80-\xff]
  | \x5c[\x00-\x7f])*\x5d)(\x2e([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a
  -\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+
  | \x5b([^\x0d\x5b-\x5d\x80-\xff]
  | \x5c[\x00-\x7f])*\x5d))*$/
) ///
RFC822.test email
它精确地减少到原始的regexp。唯一的更改是删除了整个regexp周围的一对无关的大括号,以及结束后的尾随
$

可以从字符串构建(如果不使用反斜杠):


(,似乎工作正常,但我的CF生锈了,所以我不知道它是否转换为CF)

-1因为这不是他要求的。他很可能决定在他的应用程序中只支持“普通”邮件地址。这对大多数用户来说仍然是好的,对他来说也足够好了。@DanielHilgarth也许不是,但这是他今天将得到的最好的建议。仍然,不是答案。将其作为评论发布。此外,我不同意这是最好的建议。请看我第一条评论的补充。我知道这通常是个坏主意。电子邮件验证中的每个SO答案都提到了这一点。如果这有助于你的良心,那么就用其他同样长的regexp替换它。我希望我有另一个真正长的regexp,它与电子邮件无关。那么,关于是否验证电子邮件的评论就和现在一样不合适了。80个字符的限制是怎么回事?怎么回事?这只是在我运行的测试中,以及我要求项目中的其他人遵守的一些东西(因此,打破它会树立一个坏榜样)。目前这是唯一一条没有通过测试的线路。为什么我没有想到呢!当然,效果很好。谢谢@GormCasper事实上,您的原始代码中只有几个字符错误,我可以很容易地修复并重新创建原始的一行代码,并且我更正了您接受的答案。但这两个答案都有效!:)
RFC822 = ///
^([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+
  | \x22([^\x0d\x22\x5c\x80-\xff]
  | \x5c[\x00-\x7f])*\x22)(\x2e([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a
  -\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+
  | \x22([^\x0d\x22\x5c\x80-\xff]
  | \x5c[\x00-\x7f])*\x22))*\x40([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a
  -\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+
  | \x5b([^\x0d\x5b-\x5d\x80-\xff]
  | \x5c[\x00-\x7f])*\x5d)(\x2e([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a
  -\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+
  | \x5b([^\x0d\x5b-\x5d\x80-\xff]
  | \x5c[\x00-\x7f])*\x5d))*$
///
var re = new RegExp(
               "..." + 
               "..." + 
               "...");