了解Jquery验证中的正则表达式验证

问题描述 投票:0回答:1

我正在创建一种新方法,我正在努力确保我的逻辑正确以及我如何阅读我在这里写的内容。

$.validator.addMethod('checkDomain', function (value) { 

    if(/^([\w-.]+@(?!gmail\.com)(?!yahoo\.com)(?!hotmail\.com)(?!test\.com)([\w-]+.)+[\w-]{2,4})?$/.test(value)) {
            return false;  // FAIL validation when REGEX matches    
            }
        else {
            return true;   // PASS validation otherwise
        }

}, 'Please provide a business email.');

我在这里要说的是,如果电子邮件地址与gmail匹配,例如设置为false,因为我们不希望这样。虽然当我把它设置为假时,它是倒退的。我的正则表达式了吗?如果它与其中一个电子邮件域匹配,是否会返回true?

regex
1个回答
0
投票

方法test()返回一个布尔值,你可以将if else缩短为只返回一个返回语句。

你的正则表达式包含在一个可选的组()?中,所以空字符串也会匹配。

如果您不需要捕获组,您可以将此部分([\w-]+.)+更改为(?:[\w-]+\.)+并转义点。

您可以将正则表达式更新为:

^[\w-.]+@(?!(?:(?:hot|g)mail|yahoo|test)\.com)(?:[\w-]+\.)+\w{2,4}$

Regex demo

例如,如果电子邮件地址匹配了@符号之后的任何gmail等,它将返回true:

$.validator.addMethod('checkDomain', function (value) {
    return !/^[\w-.]+@(?!(?:(?:hot|g)mail|yahoo|test)\.com)(?:[\w-]+\.)+\w{2,4}$/.test(value);
}, 'Please provide a business email.');

function checkDomain(value) {
  return !/^[\w-.]+@(?!(?:(?:hot|g)mail|yahoo|test)\.com)(?:[\w-]+\.)+\w{2,4}$/.test(value);
}

const strings = [
  "[email protected]",
  "[email protected]",
  "[email protected]",
  "[email protected]"
];

strings.forEach(s => console.log(`${s}: ${checkDomain(s)}`));

说明

  • ^字符串的开头
  • [\w-.]+匹配单词字符,连字符或点之一的1倍以上
  • @字面意思匹配
  • (?!负面预测检查以下内容不是 (?:(?:hot|g)mail|yahoo|test)\.com非捕获组与交替
  • )关闭否定前瞻
  • (?:[\w-]+\.)+重复匹配一个单词字符或连字符后跟一个点的1+倍
  • \.\w{2,4}匹配一个点和2-4个字符
  • $字符串结尾
© www.soinside.com 2019 - 2024. All rights reserved.