我正在查看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/