Jslint改进| url的字符集

Jslint improvements | Character set for url

本文关键字:字符集 url 改进 Jslint      更新时间:2023-09-26

对于这个原型url检查器。请注意,我所要做的就是在这一点上检查长度。

url:            /:'/'/(www'.)?.{1,200}'..{1,1800}/,

Jslint.com给出错误

Insecure '.'

我在这个SO帖子中也有类似的错误,这个否定的字符集。

考虑到这种背景,我认为很明显,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,The Good Parts在regex章节中有一个很好的URL检查器,但不是我现在需要的。

您要查找的正则表达式详细信息可以在StackOverflow和RFC 3986 上找到

"主机"的具体字符和表达式为:[a-z0-9'-._~%]+

您可能需要记住,有效的URL可以是IP地址(IPv4、IPv6和IPvFuture)的形式,请查看链接的RegEx以了解详细信息。

您不需要更改正则表达式。

如果问题只是JSLint在抱怨,那么可以禁用该选项。

要在jslint.com上测试它,请在Options部分查找:

[default]  . and [^...] in /RegExp/

并点击设置为[true]

然后JSLint将接受您的正则表达式。

或者,您可以使用特殊注释来禁用检查。如果您将此测试代码粘贴到JSLint中,它将接受它,而无需手动更改选项设置:

/*jslint regexp: true */
var test = /:'/'/(www'.)?.{1,200}'..{1,1800}/;

以下是此选项的文档:

耐受.[^...]。in/RegExp/

如果在RegExp文字中应允许.[^...],则为true。它们匹配的材料比预期的要多,使攻击者能够混淆应用程序。在安全应用程序中进行验证时,不应使用这些表单。

在正则表达式中使用.的方式似乎不太可能有任何"不安全"之处,所以我只想继续重写JSLint设置。

(我现在明白了,这是一个非常古老的问题,但也许这个答案对未来的其他人有用。)