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

Modify the Regex to check if sting contains no email address in jquery validate

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

$.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");

现在我需要修改它来检查 sting 是否不包含电子邮件地址。

我要:

abc@example.com(真)

abc@example.com 一些单词 (True)

一些单词 abc@example.com (True)

一些单词 abc@example.com 一些单词(正确)

一些词(错误)

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

$.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");

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

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

  2. 使用匹配任何字符串的正则表达式,但包含带有 /^(?![^]*?\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>