[英]JS Regex url validation
我嘗試使用或不使用 http 來驗證 url 不管我做了什么,函數都返回 false。 我在這個網站上檢查了我的正則表達式字符串: http : //regexr.com/並且它和我期望的一樣。
function isUrlValid(userInput) {
var regexQuery = "/(http(s)?://.)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/";
var url = new RegExp(regexQuery,"g");
if (url.test(userInput)) {
alert('Great, you entered an E-Mail-address');
return true;
}
return false;
}
我通過將 .test 更改為 .match 並保留正則表達式來解決問題。
我將函數更改為 Match + 在此處使用斜杠及其工作進行更改:(http(s)?://.)
固定功能:
function isUrlValid(userInput) {
var res = userInput.match(/(http(s)?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/g);
if(res == null)
return false;
else
return true;
}
我相信另一個答案會拒絕一些有效的 url(比如大寫的域名或長子域)並允許一些無效的(比如http://www.-example-.com或 www.%@&.com)。 我試圖考慮一些額外的 url 語法規則(沒有進入國際化)。
function isUrlValid(userInput) { var regexQuery = "^(https?://)?(www\\\\.)?([-a-z0-9]{1,63}\\\\.)*?[a-z0-9][-a-z0-9]{0,61}[a-z0-9]\\\\.[az]{2,6}(/[-\\\\w@\\\\+\\\\.~#\\\\?&/=%]*)?$"; var url = new RegExp(regexQuery,"i"); return url.test(userInput); } var input = ["https://o.sub-domain.example.com/foo/bar?foo=bar&boo=far#a%20b", "HTTP://EX-AMPLE.COM", "example.c", "example-.com"]; for (var i in input) document.write(isUrlValid(input[i]) + ": " + input[i] + "<br>");
為了還允許 IP 地址和端口號,正則表達式是:
"^(https?://)?(((www\\.)?([-a-z0-9]{1,63}\\.)*?[a-z0-9][-a-z0-9]{0,61}[a-z0-9]\\.[a-z]{2,6})|((\\d{1,3}\\.){3}\\d{1,3}))(:\\d{2,4})?(/[-\\w@\\+\\.~#\\?&/=%]*)?$"
為了還允許在域名和問號之間沒有斜線的查詢字符串(理論上是不允許的,但在大多數現實生活中都有效),正則表達式是:
"^(https?://)?(((www\\.)?([-a-z0-9]{1,63}\\.)*?[a-z0-9][-a-z0-9]{0,61}[a-z0-9]\\.[a-z]{2,6})|((\\d{1,3}\\.){3}\\d{1,3}))(:\\d{2,4})?((/|\\?)[-\\w@\\+\\.~#\\?&/=%]*)?$"
為了確保每個 % 后跟一個十六進制數,正則表達式是:
"^(https?://)?(((www\\.)?([-a-z0-9]{1,63}\\.)*?[a-z0-9][-a-z0-9]{0,61}[a-z0-9]\\.[a-z]{2,6})|((\\d{1,3}\\.){3}\\d{1,3}))(:\\d{2,4})?((/|\\?)(((%[0-9a-f]{2})|[-\\w@\\+\\.~#\\?&/=])*))?$"
. 。
其實這個問題需要一個強大的regex
,下面的代碼不是很難理解,請看下面(ES6):
const isValidUrl = urlString => {
const urlRegex = /^((http(s?)?):\/\/)?([wW]{3}\.)?[a-zA-Z0-9\-.]+\.[a-zA-Z]{2,}(\.[a-zA-Z]{2,})?$/g;
const result = urlString.match(urlRegex);
return result !== null;
};
試試這個代碼。
function CheckURL(fieldId, alertMessage) {
var url = fieldId.value;
if(url !== "")
{
if (url.match(/(http(s)?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/g) !== null)
return true;
else {
alert(alertMessage);
fieldId.focus();
return false;
}
}
}
var website = document.getElementById('Website');
if (!CheckURL(website, "Enter a valid website address")) {
return false;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.