【问题标题】:minimize regular expression最小化正则表达式
【发布时间】:2015-12-26 21:34:31
【问题描述】:

。我需要 regExp 帮助以进行电子邮件验证。我一直被这个问题困扰。

要求是: "电子邮件地址的本地部分和域部分应接受以下内容:

  • 大写和小写拉丁字母(a-z、A-Z)

  • 数字 0 到 9

  • 这些特殊字符:# - _ ~ ! $ & ' * + = 和百分位数编码,即 %20

  • 字符。 (点、句号、句号)前提是它不是第一个或最后一个字符,并且它不连续出现(例如,不允许 John..Doe@example.com)。”

    李>

我正在使用 jquery 验证器进行验证 我得到了正则表达式

 /^[a-z0-9,!#\$%&'\*\+/=\?\^_`\{\|}~-]+(\.[a-z0-9,!#\$%&'\*\+/=\?\^_`\{\|}~-]+)*@[a-z0-9,!#\$%&'\*\+/=\?\^_`\{\|}~-]+(\.[a-z0-9,!#\$%&'\*\+/=\?\^_`\{\|}~-]+)*\.([a-z0-9,!#\$%&'\*\+/=\?\^_`\{\|}~-]{2,})$/

有人可以缩小这个正则表达式吗

验证

应该可以: him@g#mail.com

不应该工作: him@g..mail.com

小提琴:http://jsfiddle.net/p6mw3/120/

【问题讨论】:

  • 您可以从字符类中删除过多的转义,它会大大减少:) 也请记住\w = [a-zA-Z0-9_]
  • 在更一般的一点上 - 谁确定了这些要求?它们是绝对固定的吗? This is worth a read.
  • 我提供小提琴,你可以检查一下吗?
  • this?您可以将重复部分声明为构建块并在构建整个 RegExp 时重用。

标签: jquery regex


【解决方案1】:

您可以将重复部分声明为构建块并在构建整个 RegExp 时重用。另外,我将[a-z0-9_] 替换为\w,因为您还需要支持大写拉丁字母(\w = [a-z0-9A-Z_]),并从字符类中删除了过多的转义符号。

var rx_block = "[\\w,!#$%&'*+/=?^`{|}~-]"; // <-- REPETITIVE BLOCK
var component = {
    input   : $('input[name="email"]'),
    mensage : {
        fields  : $('.msg'),
        success : $('.success'),
        error   : $('.error')
    }
},
regex = RegExp("^" + rx_block + "+(\\." + rx_block + "+)*@" + rx_block +
     "+(\\." + rx_block + "+)*\\.(" + rx_block + "{2,})$");  // <-- BUILD REGEX DYNAMICALLY WITH REGEXP CONSTRUCTOR

component.input.blur(function () {
    component.mensage.fields.hide();
    regex.test(component.input.val()) ? 
            component.mensage.success.show() : component.mensage.error.show();
});
.msg {
    display: none;
}
.error {
    color: red;
}
.success {
    color: green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label for="email" id="email">Hey!</label>
<input id="email" name="email" type="email" class="required" /> 
<span class="msg error">You shall not pass!</span>
<span class="msg success">You can pass!</span>

【讨论】:

    猜你喜欢
    • 2011-05-23
    • 2019-03-26
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 2017-01-18
    • 2013-04-20
    相关资源
    最近更新 更多