Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
21
rated 0 times [  27] [ 6]  / answers: 1 / hits: 28930  / 13 Years ago, tue, january 10, 2012, 12:00:00

I have a simple URL validator. The url validator works as probably every other validator.



Now I want, if the URL passed, take the https://, http:// and remove it for var b.



So what I've done is I made a another Regex which captures https://, http://, ftp:// etc and say if the url passed the long test, get the second test and replace it with empty string.



Here is what I came up with:



$(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')
}

});


Why this doesn't work?


More From » jquery

 Answers
6

protomatch.test() returns a boolean, not a string.



I think you just want:



var protomatch = /^(https?|ftp):///; // NB: not '.*'
...
var b = url.replace(protomatch, '');


FWIW, your match regexp is completely impenetrable, and almost certainly wrong. It probably doesn't permit internationalised domains, but it's so hard to read that I can't tell for sure.


[#88118] Monday, January 9, 2012, 13 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
rylee

Total Points: 658
Total Questions: 114
Total Answers: 116

Location: Christmas Island
Member since Mon, Oct 19, 2020
4 Years ago
;