jQu*_*ast 9 javascript regex validation jquery uri
我有一个简单的URL验证器.url验证器可能像其他验证器一样工作.
现在我想,如果传递了URL,请使用https://,http://并将其删除var b.
所以我做的是我制作另一个正则表达式,它捕获https://,http://,ftp://等,并说如果url通过了长测试,得到第二个测试并用空字符串替换它.
这是我想出的:
$("button").on('click', function () {
var url = $('#in').val();
var match = /^([a-z][a-z0-9\*\-\.]*):\/\/(?:(?:(?:[\w\.\-\+!$&'\(\)*\+,;=]|%[0-9a-f]{2})+:)*(?:[\w\.\-\+%!$&'\(\)*\+,;=]|%[0-9a-f]{2})+@)?(?:(?:[a-z0-9\-\.]|%[0-9a-f]{2})+|(?:\[(?:[0-9a-f]{0,4}:)*(?:[0-9a-f]{0,4})\]))(?::[0-9]+)?(?:[\/|\?](?:[\w#!:\.\?\+=&@!$'~*,;\/\(\)\[\]\-]|%[0-9a-f]{2})*)?$/;
var protomatch = /^(https?|ftp):\/\/(.*)/;
if (match.test(url)) { // IF VALID
console.log(url + ' is valid');
// if valid replace http, https, ftp etc with empty
var b = url.replace(protomatch.test(url), '');
console.log(b)
} else { // IF INVALID
console.log('not valid')
}
});
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用?
YuS*_*YuS 24
var b = url.substr(url.indexOf('://')+3);
Run Code Online (Sandbox Code Playgroud)
Aln*_*tak 17
protomatch.test() 返回一个布尔值,而不是一个字符串.
我想你只想要:
var protomatch = /^(https?|ftp):\/\//; // NB: not '.*'
...
var b = url.replace(protomatch, '');
Run Code Online (Sandbox Code Playgroud)
FWIW,你的正则match表达式是完全难以理解的,几乎肯定是错误的.它可能不允许国际化的域名,但它很难读,我无法确定.
| 归档时间: |
|
| 查看次数: |
22201 次 |
| 最近记录: |