修改给定的 jquery 验证器方法以检查字符串是否不包含 URL

Modify given jquery validator method to check if sting contains no URL

我有一个 jquery 验证器方法来检查是否输入了 URL,它工作正常

$.validator.addMethod('contains_no_url', function(value, element) {
    var url = $.validator.methods.url.bind(this);
    return url(value, element) || url('http://' + value, element);
}, 'Do not include url');

现在我需要修改它来检查一个 sting 是否不包含 URL

我要:

URL(真)

URL 一些话 (True)

一些词URL(真)

一些词URL一些词(正确)

一些词(错误)

注意:如果不建议为此目的修改现有方法,请告诉我是否存在可用于检查 sting 是否不包含 URL.

的正则表达式

@Wiktor Stribiżew 发表评论的更新

下面将使用新的正则表达式

$.validator.addMethod('contains_no_url', function (value, element) {
    return this.optional(element) || SOME_REGEX.test(value);
}, "Do not include url");

您可以使用

$.validator.addMethod('contains_no_url', function(value, element) {
    return this.optional(element) || /^(?!.*(?:ht|f)tps?:\/\/\S)(?!.*\bwww\.)/.test(value);
    }, 'Do not include url');

$('#myform').validate({
        rules: {
            "url": {
                required: true,
                contains_no_url: 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" action="">
    <input type="text" name="url" id="url" /><br/>
    <br/>
    <input type="submit" />
</form>

这里,

  • ^ - 匹配字符串的开头
  • (?!.*https?:\/\/\S) - 如果在除换行符之外的任何零个或多个字符之后存在 http/httpsftp/[=,则匹配失败17=] 后跟一个可选的 s 然后是 :// 然后是任何非空白字符
  • (?!.*\bwww\.) - 如果在除换行符之外的任何零个或多个字符之后有一个完整的单词 www 然后是 ..[=37,则匹配失败=]