簡體   English   中英

JS 正則表達式 url 驗證

[英]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-z‌​0-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-z‌​0-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-z‌​0-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM