0

我正在尝试使用 jQuery 验证器验证 URL,但我使用的正则表达式错误地验证了带有子域(例如:)的域,subdomain.domain而没有 TLD 为真。

我有这个,它验证一个子域:

jQuery.validator.addMethod("domainChk", function (value, element, params) {
    if (this.optional(element)) return true;
    var regExp = new RegExp("^[a-zA-Z0-9][a-zA-Z0-9.-]*[a-zA-Z0-9]$");
    return regExp.test(value);
}, "Valid hostname required for player code");

它也没有正确验证 TLD。所以,我可以输入subdomain.domain.aaa123并验证。它还验证少于 2 个字符的 TLD。

这只需要对美国观众进行验证(因此加拿大或类似国家的 .ca 不需要验证)

4

2 回答 2

0

你可以试试这个吗:https ://gist.github.com/jlong​​/2428561

基本上,您可以创建一个 A 元素并访问部分 URL:

var parser = document.createElement('a');
parser.href = "http://example.com:3000/pathname/?search=test#hash";

parser.protocol; // => "http:"
parser.hostname; // => "example.com"
parser.port;     // => "3000"
parser.pathname; // => "/pathname/"
parser.search;   // => "?search=test"
parser.hash;     // => "#hash"
parser.host;     // => "example.com:3000"

以下是有关广泛支持的 HTMLAnchorElement 对象的更多文档:

https://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement

于 2015-07-23T18:12:13.723 回答
0

如果您想限制 TLD,您将不得不这样做。但这里是一个起点:

/^(https?|ftp):\/\/([0-9A-Za-z][0-9A-Za-z-]{0,61}[0-9A-Za-z]\.)+(<TLD list>)/g
于 2015-07-23T18:56:03.523 回答