对于这个原型url检查器。请注意,我要做的就是在此时检查长度。
url: /:\/\/(www\.)?.{1,200}\..{1,1800}/,
Jslint.com提供错误
Insecure '.'
我对此SO post.
上的这个否定字符集有类似的错误鉴于背景,我认为很明显jslint不喜欢允许所有或大部分都作为测试模式。
所以,我只需要更换。使用域的有效字符集和域后的部分。
对于域我可以简化为
[a-zA-Z0-9\-]
域之后的部分字符集是什么...即foo.com /
之后所以有
//
接着是
www.(optional)
接着是
foo.boo.moo.(note it matched up until the last .) ( this character set is listed above)
接着是
X
如何将所有X组合在一起:
http://www.foo.X
我不关心提取端口或查询信息,我只需要域之后的所有字符集,以使每个jslint的正则表达“安全”。
注意,我只是想逐步改进。
JavaScript,Good Parts在正则表达式章节中有一个很好的URL检查器,但不是我现在需要的。
答案 0 :(得分:1)
您可以在this answer on StackOverflow和RFC 3986
中找到您要查找的正则表达式详细信息“主机”的特定字符和表达式为:[a-z0-9\-._~%]+
您可能想要记住,有效的URL可以是IP地址(IPv4,IPv6和IPvFuture)的形式,请查看链接的RegEx以获取详细信息。
答案 1 :(得分:1)
您无需更改正则表达式。
如果问题只是JSLint抱怨它,你可以禁用该选项。
要在jslint.com上对其进行测试,请查看选项部分:
[default] . and [^...] in /RegExp/
并点击它将其设置为[true]
。
然后JSLint将接受你的正则表达式。
或者,您可以使用特殊注释来禁用检查。如果将此测试代码粘贴到JSLint中,它将接受它而无需手动更改选项设置:
/*jslint regexp: true */
var test = /:\/\/(www\.)?.{1,200}\..{1,1800}/;
以下是此选项的documentation:
容忍
.
和[^...]
。在/ RegExp /
true
如果在RegExp文字中允许.
和[^...]
。它们匹配的材料超出预期,允许攻击者混淆应用程序。在安全应用程序中进行验证时,不应使用这些表单。
对于在正则表达式中使用.
的方式,似乎不太可能存在“不安全”,因此我将继续并覆盖JSLint设置。
(我现在看到这是一个非常古老的问题,但也许这个答案对将来的其他人有用。)