修改给定的 jquery 验证器方法以检查字符串是不是不包含 URL
Posted
技术标签:
【中文标题】修改给定的 jquery 验证器方法以检查字符串是不是不包含 URL【英文标题】:Modify given jquery validator method to check if sting contains no URL修改给定的 jquery 验证器方法以检查字符串是否不包含 URL 【发布时间】:2021-08-09 12:00:19 【问题描述】:我有一个 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');
现在我需要对其进行修改以检查字符串是否不包含 URL
我想要:
网址(真)
网址一些字(真)
一些词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");
【问题讨论】:
对不起,你是什么意思?如果我们不能修改代码,那么正则表达式将在哪里使用? 新的正则表达式将用于添加新的 jquery 验证方法,请参阅更新的问题。 你的rules
说什么?
我想阻止输入包含url的字符串
正如您在其他问题的评论中所解释的那样,您的布尔值都是向后的。如果您想要“无 URL”,则该方法在看到 URL 时必须返回 false
。对于这个插件,false
=> 验证失败,true
=> 通过验证。
【参考方案1】:
你可以使用
$.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
/https
或 ftp
/ftps
后跟可选的 s
和 ://
,则匹配失败然后是任何非空白字符
(?!.*\bwww\.)
- 如果在除换行符之外的任何零个或多个字符之后,有一个完整的单词 www
然后是 .
,则匹配失败。
【讨论】:
感谢您的宝贵时间,请包括 ftp 和 www。在正则表达式中。以上是关于修改给定的 jquery 验证器方法以检查字符串是不是不包含 URL的主要内容,如果未能解决你的问题,请参考以下文章