2

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

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

Jslint.com 给出错误

Insecure '.'

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

鉴于这种背景,我认为很明显 jslint 不喜欢允许全部或几乎全部作为测试模式。

所以,我只需要更换 . 具有域的有效字符集和域之后的部分。

对于我可以简化为的域

[a-zA-Z0-9\-]

域之后的部分的字符集是什么...ieafter 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 在正则表达式章节中有一个很好的 URL 检查器,但不是我现在需要的。

4

2 回答 2

1

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

“主机”的具体字符和表达式是:[a-z0-9\-._~%]+

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

于 2013-06-03T02:28:41.680 回答
1

您无需更改正则表达式。

如果问题只是 JSLint 抱怨它,您可以禁用该选项。

要在jslint.com上对其进行测试,请在“选项”部分查看:

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

并单击它以将其设置为[true]

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

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

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

这是此选项的文档

容忍.[^...]。在 /RegExp/

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

您在正则表达式中使用的方式似乎不太可能有任何“不安全” .,所以我会继续并覆盖 JSLint 设置。

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

于 2013-06-07T11:55:51.423 回答