Tôi có trình xác thực URL đơn giản. Trình xác thực url hoạt động giống như mọi trình xác thực khác.URI Regex: Thay thế http: //, https: //, ftp: // bằng chuỗi trống nếu URL hợp lệ
Bây giờ tôi muốn, nếu URL được chuyển, hãy lấy https: //, http: // và xóa URL đó cho var b
. Vì vậy, những gì tôi đã làm là tôi đã thực hiện một Regex khác chụp https: //, http: //, ftp: // etc và nói nếu url đã vượt qua bài kiểm tra dài, hãy làm bài kiểm tra thứ hai và thay thế nó với chuỗi rỗng.
Dưới đây là những gì tôi đã đưa ra:
$("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})[email protected])?(?:(?:[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')
}
});
Tại sao điều này không hoạt động?
hãy xác định "không hoạt động" – Alnitak
vì protomatch.test (url) trả về đúng hoặc sai, không phải là chuỗi – Hoff
Regex bạn đang sử dụng ở đó vượt quá giới hạn của sự tỉnh táo. Bạn phải phá vỡ nó, nếu không nó là một đống không thể quản lý, unintelligible, unmaintainable của nhân vật và trong trạng thái này nó sẽ không làm bạn bất kỳ tốt. Thử cách tiếp cận theo giai đoạn: Giai đoạn một: Kiểm tra cấu trúc cơ bản, thu hút các cấu trúc cơ bản đó thành các nhóm. Giai đoạn 2: Các bài kiểm tra cơ bản hơn về các nhóm để xác định nội dung của chúng: Giai đoạn 3: Các bài kiểm tra tính hợp lệ cá nhân và trích xuất giá trị từ các nhóm đó. Có, nó là một ít mã hơn, nhưng nó sẽ không làm cho đầu của bạn bị tổn thương và nó sẽ có ít lỗi hơn. – Tomalak