修改正则表达式以检查 sting 是不是在 jquery validate 中不包含电子邮件地址

Posted

技术标签:

【中文标题】修改正则表达式以检查 sting 是不是在 jquery validate 中不包含电子邮件地址【英文标题】:Modify the Regex to check if sting contains no email address in jquery validate修改正则表达式以检查 sting 是否在 jquery validate 中不包含电子邮件地址 【发布时间】:2021-08-08 08:28:51 【问题描述】:

我有一个正则表达式来检查是否没有输入有效的电子邮件地址

$.validator.addMethod('contains_no_email', function (value, element) 
    return this.optional(element) || /^(?!\w+([-+.'][^\s]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$)/.test(value);
, "Do not include an email address");

现在我需要修改它以检查一个字符串是否不包含电子邮件地址。

我想要:

abc@example.com(真)

abc@example.com一些话(真)

一些词abc@example.com(真)

一些词abc@example.com一些词(真)

一些词(假)

【问题讨论】:

验证失败需要false,验证通过需要true。根据您的描述,您所有的布尔值都是向后的。 【参考方案1】:

您需要确保输入文本与包含电子邮件的字符串不匹配。因此,您可以在此处遵循两种方法:

    使用/\w+(?:[-+.']\w+)*@\w+(?:[-.]\w+)*\.\w+(?:[-.]\w+)*/ 正则表达式并设置contains_no_email: false

    使用匹配任何字符串的正则表达式,但包含/^(?![^]*?\w+(?:[-+.']\w+)*@\w+(?:[-.]\w+)*\.\w+(?:[-.]\w+)*)/ 的类似电子邮件的字符串的字符串并使用contains_no_email: true

您可以通过更改 contains_no_email 值来交换逻辑。

这是一个示例解决方案:

$.validator.addMethod('contains_no_email', function (value, element) 
    return this.optional(element) ||  
           /^(?![\s\S]*?\w+(?:[-+.']\w+)*@\w+(?:[-.]\w+)*\.\w+(?:[-.]\w+)*)/.test(value);
    , "Do not include an email address"
);

$('#myform').validate(
        // other options,
        rules: 
            "email": 
                required: true,
                contains_no_email: true
            
        
    );
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.13.1/jquery.validate.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.13.1/additional-methods.js"></script>

<form id="myform">
    <input type="text" name="email" /><br/>
    <br/>
    <input type="submit" />
</form>

【讨论】:

感谢您的时间和精力,您能告诉我正则表达式以同样的方式检查 url 吗? @DMP 通常,人们使用非常广泛的模式,例如/https?:\/\/\S+/【参考方案2】:

简单地说,您可以尝试使用单词边界而不是 ^$ 锚点来围绕当前的电子邮件正则表达式:

$.validator.addMethod('contains_no_email', function (value, element) 
    return this.optional(element) || /\b\w+([-+.'][^\s]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)\b/.test(value);
, "Do not include an email address");

【讨论】:

感谢您的时间和精力,其中有错误Invalid regular expression: /\b\w+([-+.'][^\s]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+\b/: Unterminated group 抱歉,这里缺少一个结束) 现在没有报错,但是不行 这里没有使用单词边界的意义,因为在模式的开始和\w\w 和模式的结束之间总是存在隐含的单词边界。无论如何,问题不只是这里的正则表达式,代码和正则表达式都应该考虑。

以上是关于修改正则表达式以检查 sting 是不是在 jquery validate 中不包含电子邮件地址的主要内容,如果未能解决你的问题,请参考以下文章

检查字符串是不是以正则表达式数字开头

字符串的正则表达式,不以指定的子字符串结尾[重复]

检查行是不是匹配正则表达式

快速正则表达式检查字符串是不是为金额格式(2x,3x,...)

python 正则替换不包含某字符串的其他字符

如何制作正则表达式以查看字符串是不是包含某个字母