我正在查看jquery.validate plugin source code,以检查正在使用哪些表达式来检查字段的有效性,因此我可以在服务器端实现相同的功能。我进入正则表达式以接收电子邮件,例如:


return this.optional(element) ||

  
  / ^(((([az] | \ d | [!#\ $%&'* +-/ = \?\ ^ _ {\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_ {\ |}〜] | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF])))|((\ x22)(((((\ x20 | \ x09)(\ x0d \ x0a))?(\ x20 | \ x09)+)?((([\ x01 -\ x08 \ x0b \ x0c \ x0e- \ x1f \ x7f] | \ x21 | [\ x23- \ x5b] | [\ x5d- \ x7e] | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0-\\ uFFEF])|(\([\ x01- \ x09 \ x0b \ x0c \ x0d- \ x7f] | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF])))()((((\ x20 | \ x09)(\ x0d \ x0a))?(\ x20 | \ x09)+)?(\ x22)))@(((([az] | \ d | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF])|(([[az] | \ d | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF]])[[az] | \ d |-|。| _ |〜 | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF])*([[az] | \ d | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF])))))。) +(([az] | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF])|(([[az] | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF]) ([az] | \ d |-|。| _ |〜| [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF])*([az] | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF]))).. $ / i.test(value);


我猜想,粗体部分是表达式,但它在.NET中不起作用(它始终表示电子邮件错误),我猜这是因为javascript编码字符。我可以使用一种简单的方法来翻译表达式吗?

谢谢。

最佳答案

尽管它是商业性的(即非免费的,但很便宜),但我不能高度推荐“ RegexBuddy” http://www.regexbuddy.com/

然后,使用标准的“标准” RegEx语法(可以交互构建和测试),它将以正确的语法生成源代码,以在多种环境和许多“方案”中使用,包括.net,javascript,Perl,PHP,Python等。

以我对Regex的淡淡了解,该程序是一个救命稻草。

*免责声明:没有任何隶属关系-只是一个非常满意的多年客户

**特别注意-我只是注意到Jeff Attwood在其主页上有推荐信!


只是为了好玩:这是RegExBuddy为.net(C#)和JavaScript生成的RFC2822电子邮件验证源


JavaScript:

if (/(?:[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/im.test(subject)) {
    // Successful match
} else {
    // Match attempt failed
}


.NET C#

try {
    if (Regex.IsMatch(subjectString, @"(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|""(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*"")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])", RegexOptions.IgnoreCase | RegexOptions.Multiline)) {
        // Successful match
    } else {
        // Match attempt failed
    }
} catch (ArgumentException ex) {
    // Syntax error in the regular expression

关于javascript - 如何将Javascript语法中的正则表达式转换为.NET语法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6787871/

10-12 07:01