जावास्क्रिप्ट का उपयोग करके URL को मान्य करने का प्रयास करना


84

मैं एक URL को मान्य करना और संदेश प्रदर्शित करना चाहता हूं। नीचे मेरा कोड है:

$("#pageUrl").keydown(function(){
        $(".status").show();
        var url = $("#pageUrl").val();

        if(isValidURL(url)){

        $.ajax({
            type: "POST",
            url: "demo.php",
            data: "pageUrl="+ url,
            success: function(msg){
                if(msg == 1 ){
                    $(".status").html('<img src="images/success.gif"/><span><strong>SiteID:</strong>12345678901234456</span>');
                }else{
                    $(".status").html('<img src="images/failure.gif"/>');
                }
            }
            });

            }else{

                    $(".status").html('<img src="images/failure.gif"/>');
            }

    });


function isValidURL(url){
    var RegExp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;

    if(RegExp.test(url)){
        return true;
    }else{
        return false;
    }
} 

मेरी समस्या अब यह है कि एक उचित URL दर्ज करने पर भी यह एक त्रुटि संदेश दिखाएगा जब तक कि यह नियमित अभिव्यक्ति से मेल नहीं खाता है, और यह तब भी सही है जब URL कुछ ऐसा हो "http://wwww"

मैं आपके सुझावों की सराहना करता हूं।


3
सर्वर-साइड चेकिंग को जोड़ना भी न भूलें क्योंकि जावास्क्रिप्ट चेकिंग को आसानी से हैक किया जा सकता है।
रैंडेल

URL मिलान (जावास्क्रिप्ट में) के लिए अधिक विश्वसनीय रेगेक्स खोजना अपेक्षाकृत आसान होना चाहिए। एक साइड नोट पर, मैं अनुशंसा करूंगा RegExpकि जब तक कि वे कंस्ट्रक्टर / नेमस्पेस (जो आपका वैरिएबल नहीं है) के रूप में चर (जैसे आपके उदाहरण में) को कैपिटल न करने की सलाह दें । यह भी मत भूलो कि RegExp#testपहले से ही बूलियन रिटर्न करता है, इसलिए आपको वास्तव में ज़रूरत नहीं है कि अगर / और; बस करो - return re.test(url)
kangax

5
नोट: url "wwww"; एक मान्य url है। आपके पास wwww
kanngard

Jquery प्लगइन सत्यापन URL को भी मान्य करता है। docs.jquery.com/Plugins/Validation/Methods/url
कोडर

2
गूगल के बंद के पुस्तकालय में एक यूआरएल सत्यापनकर्ता है goog.string.linkify: नाम स्थान है जो आप स्रोत यहाँ से बाहर चीर कर सकते हैं code.google.com/p/closure-library/source/browse/closure/goog/... पर देखो findFirstUrl()
टेक्नेटियम

जवाबों:


69

किसी ने जक्वेरी वैलिडेशन प्लगइन का उल्लेख किया, लगता है कि यदि आप केवल url को सत्यापित करना चाहते हैं, तो प्लगइन से रेगेक्स की लाइन यहां दी गई है:

return this.optional(element) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);

यहाँ वे इसे कहाँ से मिला है: http://projects.scottsplayground.com/iri/

@Nhahtdh द्वारा इंगित किया गया है:

        // Copyright (c) 2010-2013 Diego Perini, MIT licensed
        // https://gist.github.com/dperini/729294
        // see also https://mathiasbynens.be/demo/url-regex
        // modified to allow protocol-relative URLs
        return this.optional( element ) || /^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[/?#]\S*)?$/i.test( value );

स्रोत: https://github.com/jzaefferer/jquery-validation/blob/c1db10a34c0847c28a5bd30e3ee1117e137ca834/crc/core.js#L1349


JQuery मान्यकरण का दृष्टिकोण डोमेन नामों में अंडरस्कोर ("_") की अनुमति देता है। जहां तक ​​मुझे पता चला है कि डोमेन नामों में इसकी अनुमति नहीं है। केवल हाइफ़न की अनुमति है ("-")। filter_var($url, FILTER_VALIDATE_URL)उदाहरण के लिए, PHP के डोमेन नामों में अंडरस्कोर की अनुमति नहीं है।
व्लाडियस

\ U00A0- \ uD7FF सीमा अत्यधिक विस्तृत है। "(\ U201D) जैसे उद्धरण वर्ण उस सीमा में हैं। उदाहरण के लिए, यदि व्हॉट्सएप पर पहली बार विभाजन किया जाता है, तो उद्धृत वाक्य का अंत 'यह' हो सकता है। '' यदि यह तकनीकी रूप से गलत सकारात्मक नहीं है, तो यह आम तौर पर एक यूआरएल की पहचान के लिए इस regex का उपयोग करने पर व्यवहार में होगा।
मेटा

2
उपरोक्त
रेगीक्स

1
रेगेक्स 1306 तक पहुंच गया है - github.com/jzaefferer/jquery-validation/blob/master/src/…
द ओनली वन अराउंड

2
@ कूचा: एक मान्य URL www.google.com नहीं है, इसलिए इसे परीक्षण में विफल होना चाहिए।
श्री लांस ई स्लोन

47

Regex का उपयोग करके URL पार्स करना व्यावहारिक नहीं है। RFC1738 नियमों के पूर्ण कार्यान्वयन के परिणामस्वरूप एक बहुत लंबा रेगेक्स होगा (यह भी संभव है)। निश्चित रूप से आपकी वर्तमान अभिव्यक्ति कई मान्य URL को विफल करती है, और अमान्य को पारित करती है।

बजाय:

ए। एक उचित URL पार्सर का उपयोग करें जो वास्तव में वास्तविक नियमों का पालन करता है। (मुझे जावास्क्रिप्ट के लिए एक का पता नहीं है; यह संभवतः ओवरकिल होगा। आप इसे सर्वर साइड पर कर सकते हैं)। या,

ख। बस किसी भी अग्रणी या अनुगामी रिक्त स्थान को ट्रिम कर दें, फिर इसे सामने की तरफ अपनी पसंदीदा योजनाओं में से एक देखें (आमतौर पर 'http: //' या 'https: //'), और इसे उस पर छोड़ दें। या,

सी। URL का उपयोग करने का प्रयास करें और देखें कि अंत में क्या निहित है, उदाहरण के लिए इसे सर्वर-साइड से HTTP HEAD अनुरोध भेजकर। यदि आपको 404 या कनेक्शन त्रुटि मिलती है, तो यह संभवतः गलत है।

यह सच है भले ही url " http: // wwww " जैसा कुछ हो ।

खैर, यह वास्तव में एक पूरी तरह से मान्य URL है।

यदि आप यह जांचना चाहते हैं कि क्या वास्तव में 'wwww' जैसा कोई होस्टनाम मौजूद है, तो आपके पास DNS में इसे देखने के अलावा कोई विकल्प नहीं है। फिर से, यह सर्वर-साइड कोड होगा।


44
क्या यह व्यावहारिक है? हाँ। क्या यह प्रश्न का उत्तर देता है या कार्यान्वयन के लिए पर्याप्त जानकारी प्रदान करता है? नंबर
कोरीवर्ड

1
IRIs ( RFC 3987 ) के साथ निकटता से मिलान करने के लिए एक regex के लिए , " W3C कम्पेनेंट URL के लिए नियमित अभिव्यक्ति? " देखें। ध्यान दें कि यह किसी भी IRI से न केवल URL ( RFC 1738 ) या URI ( RFC 3986 ) से मेल खाएगा ।
रोबिन विंसलो

33
function validateURL(textval) {
    var urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/;
    return urlregex.test(textval);
}

यह URL के लिए सही वापस आ सकता है जैसे:

http://stackoverflow.com/questions/1303872/url-validation-using-javascript

या:

http://regexlib.com/DisplayPatterns.aspx?cattabindex=1&categoryId=2

2
RegExpकंस्ट्रक्टर क्यों ? एक शाब्दिक यहाँ ठीक है। किसी चर को वस्तु क्यों सौंपें? function validateURL(textval) { return /^(http...$/.test(textval) }थोड़ा छोटा और स्पष्ट है।
davidchambers 15'11

7
[... & amp; ...] वह नहीं करेगा जो आप अपेक्षा करते हैं। एक चरित्र वर्ग तार के लिए अनुमति नहीं देता है।
Genio

यह URL वैध होने के बावजूद उत्तीर्ण नहीं होता है: uk.reuters.com/article/2013/02/25/… (अंत से 20130225 निकालें और यह वैध है)
ytoledano

asdf.asdf इस एक के साथ सच लौट रहा है। क्यों?
रज़ा अहमद

यह सब उस पर निर्भर करता है जिसे आप "मान्य URL" से समझते हैं। आपके द्वारा दिए गए सभी उदाहरण ब्राउज़र एड्रेस बार में पेस्ट किए जाने पर काम करेंगे (मान्य माना जाता है) और जब इसका उपयोग किया जाता है तो सबसे अधिक संभावना विफल (अमान्य माना जाता है) होगी <a href="">
trejder

16

मैंने http और https यूआरएल की जाँच करने के लिए rfc1738 और rfc3986 पर एक URL सत्यापन फ़ंक्शन आधार भी लिखा। मैं इस मॉड्यूलर को धारण करने की कोशिश करता हूं, इसलिए इसे बेहतर बनाए रखा जा सकता है और अपनी आवश्यकताओं के अनुकूल बनाया जा सकता है।

एक पंक्ति में RegExp इस पोस्ट के अंत में दिखा है।

RegExp कुछ अंतरराष्ट्रीय डोमेन या IPv4 नंबर के साथ HTTP और HTTPS URL स्वीकार करता है। IPv6 अभी तक समर्थित नहीं है।

window.isValidURL = (function() {// wrapped in self calling function to prevent global pollution

     //URL pattern based on rfc1738 and rfc3986
    var rg_pctEncoded = "%[0-9a-fA-F]{2}";
    var rg_protocol = "(http|https):\\/\\/";

    var rg_userinfo = "([a-zA-Z0-9$\\-_.+!*'(),;:&=]|" + rg_pctEncoded + ")+" + "@";

    var rg_decOctet = "(25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|[1-9][0-9]|[0-9])"; // 0-255
    var rg_ipv4address = "(" + rg_decOctet + "(\\." + rg_decOctet + "){3}" + ")";
    var rg_hostname = "([a-zA-Z0-9\\-\\u00C0-\\u017F]+\\.)+([a-zA-Z]{2,})";
    var rg_port = "[0-9]+";

    var rg_hostport = "(" + rg_ipv4address + "|localhost|" + rg_hostname + ")(:" + rg_port + ")?";

    // chars sets
    // safe           = "$" | "-" | "_" | "." | "+"
    // extra          = "!" | "*" | "'" | "(" | ")" | ","
    // hsegment       = *[ alpha | digit | safe | extra | ";" | ":" | "@" | "&" | "=" | escape ]
    var rg_pchar = "a-zA-Z0-9$\\-_.+!*'(),;:@&=";
    var rg_segment = "([" + rg_pchar + "]|" + rg_pctEncoded + ")*";

    var rg_path = rg_segment + "(\\/" + rg_segment + ")*";
    var rg_query = "\\?" + "([" + rg_pchar + "/?]|" + rg_pctEncoded + ")*";
    var rg_fragment = "\\#" + "([" + rg_pchar + "/?]|" + rg_pctEncoded + ")*";

    var rgHttpUrl = new RegExp( 
        "^"
        + rg_protocol
        + "(" + rg_userinfo + ")?"
        + rg_hostport
        + "(\\/"
        + "(" + rg_path + ")?"
        + "(" + rg_query + ")?"
        + "(" + rg_fragment + ")?"
        + ")?"
        + "$"
    );

    // export public function
    return function (url) {
        if (rgHttpUrl.test(url)) {
            return true;
        } else {
            return false;
        }
    };
})();

एक पंक्ति में RegExp:

var rg = /^(http|https):\/\/(([a-zA-Z0-9$\-_.+!*'(),;:&=]|%[0-9a-fA-F]{2})+@)?(((25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|[1-9][0-9]|[0-9])(\.(25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|[1-9][0-9]|[0-9])){3})|localhost|([a-zA-Z0-9\-\u00C0-\u017F]+\.)+([a-zA-Z]{2,}))(:[0-9]+)?(\/(([a-zA-Z0-9$\-_.+!*'(),;:@&=]|%[0-9a-fA-F]{2})*(\/([a-zA-Z0-9$\-_.+!*'(),;:@&=]|%[0-9a-fA-F]{2})*)*)?(\?([a-zA-Z0-9$\-_.+!*'(),;:@&=\/?]|%[0-9a-fA-F]{2})*)?(\#([a-zA-Z0-9$\-_.+!*'(),;:@&=\/?]|%[0-9a-fA-F]{2})*)?)?$/;

2
यह भी खूब रही! बहुत मददगार है कि आप इसे अलग-अलग हिस्सों में तोड़ते हैं - मैं एक बड़े पैमाने पर रेगेक्स पर आंख बंद करके भरोसा नहीं करना चाहता।
जेसन

12

इसी तरह की स्थिति में मैं इससे दूर हो गया:

someUtils.validateURL = function(url) {
    var parser = document.createElement('a');
    try {
        parser.href = url;
        return !!parser.hostname;
    } catch (e) {
        return false;
    }
};

यदि ब्राउज़र आपके लिए यह कर सकता है तो पहिया का आविष्कार क्यों करें? लेकिन, ज़ाहिर है, यह केवल ब्राउज़र में काम करेगा।

पार्स किए गए URL के विभिन्न भाग हैं, जैसे कि ब्राउज़र इसकी व्याख्या कैसे करेगा:

parser.protocol; // => "http:"
parser.hostname; // => "example.com"
parser.port;     // => "8080"
parser.pathname; // => "/path/"
parser.search;   // => "?search=test"
parser.hash;     // => "#hash"
parser.host;     // => "example.com:3000"

इनका उपयोग करके आप आवश्यकताओं के आधार पर अपने सत्यापन कार्य में सुधार कर सकते हैं। एकमात्र दोष यह है कि यह सापेक्ष URL स्वीकार करेगा और वर्तमान पृष्ठ सर्वर के होस्ट और पोर्ट का उपयोग करेगा। लेकिन आप इसे अपने लाभ के लिए उपयोग कर सकते हैं, भागों से URL को फिर से जोड़कर और इसे हमेशा अपनी AJAX सेवा में पूरा करके।

जो validateURLस्वीकार नहीं करेगा वह अमान्य URL है, उदाहरण के लिए http:\:8883गलत वापस आएगा, लेकिन :1234मान्य है और इसे http://pagehost.example.com/:1234एक रिश्तेदार पथ के रूप में व्याख्या किया गया है।

अपडेट करें

यह दृष्टिकोण अब Chrome और अन्य WebKit ब्राउज़रों के साथ काम नहीं कर रहा है। यहां तक ​​कि जब URL अमान्य है, तब भी hostname कुछ मूल्य से भरा है, उदाहरण के लिए base। यह अभी भी URL के कुछ हिस्सों को पार्स करने में मदद करता है, लेकिन किसी को मान्य करने की अनुमति नहीं देगा।

संभावित बेहतर नो-खुद-पार्सर दृष्टिकोण का उपयोग करना var parsedURL = new URL(url)और अपवादों को पकड़ना है। उदाहरण के लिए URL API देखें । सभी प्रमुख ब्राउज़रों और NodeJS द्वारा समर्थित, हालांकि अभी भी प्रयोगात्मक चिह्नित हैं।


3
यह TRUE के लिए लौटेगा<script>alert();</script>
Subin

2
@Subin आधुनिक ब्राउज़रों में इस उत्तर में दृष्टिकोण अब काम नहीं कर रहा है। इस पर ध्यान आकर्षित करने के लिए धन्यवाद। वास्तव में, hostname भरा जाता है चाहे आप कितनी भी स्ट्रिंग से गुजरें।
एलेक्स पक्का

8

मुझे http://angularjs.org/ से मिला सर्वश्रेष्ठ रेगेक्स

var urlregex = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/;


यदि मैं इसका परीक्षण करता हूं: ---- / ^ (ftp | http | https): \ / \ / ((w w +: {0,1} \ w * @)? ((S S +) (: [0-9] + )। (\ / / \ _ / ([\ w # !:? = = &% @! \ - \ /]))? $ /। परीक्षण (' abc.com.com.com' ) यह सही मूल्य लौटाता है? । मुझे लगता है कि इसे url में केवल 2 .com की अनुमति दी जानी चाहिए।
अभिषेक

5

इसी से मेरा काम बना है:

function validateURL(value) {
    return /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);
    }

वहाँ से बस एक समारोह में फोन करने की बात है एक सही या गलत वापस पाने के लिए:

validateURL(urltovalidate);

सिर ऊपर, यह आईपी पते के लिए विफल हो जाएगा।
आकिल फर्नांडिस

5

मुझे पता है कि यह काफी पुराना प्रश्न है, लेकिन इसका कोई स्वीकृत उत्तर नहीं है, इसलिए मैं आपको URI.js ढांचे का उपयोग करने का सुझाव देता हूं: https://github.com/medialize/URI.js

आप एक कोशिश / कैच ब्लॉक का उपयोग करके विकृत यूआरआई की जांच के लिए इसका उपयोग कर सकते हैं:

function isValidURL(url)
{
    try {
        (new URI(url));
        return true;
    }
    catch (e) {
        // Malformed URI
        return false;
    }
}

बेशक यह "% @" जैसी किसी चीज़ को एक अच्छी तरह से बनाए गए रिश्तेदार URI के रूप में मानेगा ... इसलिए मेरा सुझाव है कि आप अधिक चेक करने के लिए URI.js API पढ़ें , उदाहरण के लिए यदि आप यह सुनिश्चित करना चाहते हैं कि उपयोगकर्ता ने अच्छी तरह से बनाया है निरपेक्ष URL आप इस तरह कर सकते हैं:

function isValidURL(url)
{
    try {
        var uri = new URI(url);
        // URI has a scheme and a host
        return (!!uri.scheme() && !!uri.host());
    }
    catch (e) {
        // Malformed URI
        return false;
    }
}

यह रिश्तों पर विफल रहता है: // लोकलहोस्ट: 86 / asdfghjkl
शिवम चावला

आपका URL मान्य है, इसलिए परीक्षण सही है। मुझे लगता है कि आप क्या करना चाहते हैं यह जांचें कि प्रोटोकॉल http (s) है, तो बस !!uri.scheme().match(/^http(s?)$/)परीक्षण में जोड़ें ।
रोमेन


2

आप URL API का उपयोग कर सकते हैं जो हाल ही में मानक है। ब्राउज़र का समर्थन सबसे अच्छा है, लिंक देखें अमान्य URL के new URL(str)लिए फेंकने की गारंटी है TypeError

जैसा कि ऊपर कहा गया है, http://wwwwएक मान्य URL है।


1

यदि आप अधिक विश्वसनीय रेगेक्स की तलाश कर रहे हैं, तो RegexLib देखें। यहाँ वह पृष्ठ है जिसमें आप शायद दिलचस्पी लेंगे:

http://regexlib.com/Search.aspx?k=url

जब तक कि व्यक्ति टाइप कर रहा है, तब दिखाई देने वाले त्रुटि संदेशों के लिए, ईवेंट को इसमें से बदल keydownदें blurऔर फिर यह केवल तभी जांच करेगा जब व्यक्ति अगले तत्व पर चला जाएगा।


1
var RegExp = (/^HTTP|HTTP|http(s)?:\/\/(www\.)?[A-Za-z0-9]+([\-\.]{1}[A-Za-z0-9]+)*\.[A-Za-z]{2,40}(:[0-9]{1,40})?(\/.*)?$/);

1

मेरा समाधान:

function isValidUrl(t)
{
    return t.match(/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i)
}

0

डेमो: http://jsbin.com/uzimeb/1/edit

function checkURL(value) {
    var urlregex = new RegExp("^(http|https|ftp)\://([a-zA-Z0-9\.\-]+(\:[a-zA-Z0-9\.&amp;%\$\-]+)*@)*((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\?\'\\\+&amp;%\$#\=~_\-]+))*$");
    if (urlregex.test(value)) {
        return (true);
    }
    return (false);
}

0

मैंने विभिन्न समाधानों की तुलना करने के लिए एक महान संसाधन पाया है: https://mathiasbynens.be/demo/url-regex

उस पृष्ठ के अनुसार, डाईगोपोरिनी से केवल समाधान सभी परीक्षण पास करता है। यहाँ है कि regex:

_^(?:(?:https?|ftp)://)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\x{00a1}-\x{ffff}0-9]+-?)*[a-z\x{00a1}-\x{ffff}0-9]+)(?:\.(?:[a-z\x{00a1}-\x{ffff}0-9]+-?)*[a-z\x{00a1}-\x{ffff}0-9]+)*(?:\.(?:[a-z\x{00a1}-\x{ffff}]{2,})))(?::\d{2,5})?(?:/[^\s]*)?$_iuS

0

मैंने Google में बहुत सारे url सत्यापनकर्ताओं की जाँच की और कोई भी मेरे लिए काम नहीं करता है। उदाहरण के लिए मैं 'aa.com' जैसे लिंक पर मान्य देखना चाहता हूँ। मुझे स्ट्रिंग में डॉट साइन के लिए मूर्खतापूर्ण जांच पसंद है।

function isValidUri(str) {
  var dotIndex = str.indexOf('.');
  return (dotIndex > 0 && dotIndex < str.length - 2);
}

यह स्ट्रिंग की शुरुआत और अंत पर नहीं रहना चाहिए (अब हमारे पास एक वर्ण के साथ शीर्ष स्तर के डोमेन नाम नहीं हैं)।


-1

यहां एक नियमित अभिव्यक्ति है जो बिल फिट हो सकती है (यह बहुत लंबी है):

/^(?:\u0066\u0069\u006C\u0065\u003A\u002F{2}(?:\u002F{2}(?:(?:[\u0041-\u005A\u0061-\u007A\u0030-\u0039\u002D\u002E\u005F\u007E\u0021\u0024\u0026\u0027\u0028\u0029\u002A\u002B\u002C\u003B\u003D]|\u0025[\u0030-\u0039\u0041-\u0046\u0061-\u0066][\u0030-\u0039\u0041-\u0046\u0061-\u0066])*\u0040)?(?:\u005B(?:(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A){6}(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}|(?:(?:[\u0030-\u0039]|[\u0031-\u0039][\u0030-\u0039]|\u0031[\u0030-\u0039]{2}|\u0032[\u0030-\u0034][\u0030-\u0039]|\u0032\u0035[\u0030-\u0035])\u002E){3}(?:[\u0030-\u0039]|[\u0031-\u0039][\u0030-\u0039]|\u0031[\u0030-\u0039]{2}|\u0032[\u0030-\u0034][\u0030-\u0039]|\u0032\u0035[\u0030-\u0035]))|\u003A{2}(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A){5}(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}|(?:(?:[\u0030-\u0039]|[\u0031-\u0039][\u0030-\u0039]|\u0031[\u0030-\u0039]{2}|\u0032[\u0030-\u0034][\u0030-\u0039]|\u0032\u0035[\u0030-\u0035])\u002E){3}(?:[\u0030-\u0039]|[\u0031-\u0039][\u0030-\u0039]|\u0031[\u0030-\u0039]{2}|\u0032[\u0030-\u0034][\u0030-\u0039]|\u0032\u0035[\u0030-\u0035]))|(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4})?\u003A{2}(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A){4}(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}|(?:(?:[\u0030-\u0039]|[\u0031-\u0039][\u0030-\u0039]|\u0031[\u0030-\u0039]{2}|\u0032[\u0030-\u0034][\u0030-\u0039]|\u0032\u0035[\u0030-\u0035])\u002E){3}(?:[\u0030-\u0039]|[\u0031-\u0039][\u0030-\u0039]|\u0031[\u0030-\u0039]{2}|\u0032[\u0030-\u0034][\u0030-\u0039]|\u0032\u0035[\u0030-\u0035]))|(?:(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A)?[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4})?\u003A{2}(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A){3}(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}|(?:(?:[\u0030-\u0039]|[\u0031-\u0039][\u0030-\u0039]|\u0031[\u0030-\u0039]{2}|\u0032[\u0030-\u0034][\u0030-\u0039]|\u0032\u0035[\u0030-\u0035])\u002E){3}(?:[\u0030-\u0039]|[\u0031-\u0039][\u0030-\u0039]|\u0031[\u0030-\u0039]{2}|\u0032[\u0030-\u0034][\u0030-\u0039]|\u0032\u0035[\u0030-\u0035]))|(?:(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A){0,2}[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4})?\u003A{2}(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A){2}(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}|(?:(?:[\u0030-\u0039]|[\u0031-\u0039][\u0030-\u0039]|\u0031[\u0030-\u0039]{2}|\u0032[\u0030-\u0034][\u0030-\u0039]|\u0032\u0035[\u0030-\u0035])\u002E){3}(?:[\u0030-\u0039]|[\u0031-\u0039][\u0030-\u0039]|\u0031[\u0030-\u0039]{2}|\u0032[\u0030-\u0034][\u0030-\u0039]|\u0032\u0035[\u0030-\u0035]))|(?:(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A){0,3}[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4})?\u003A{2}[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}|(?:(?:[\u0030-\u0039]|[\u0031-\u0039][\u0030-\u0039]|\u0031[\u0030-\u0039]{2}|\u0032[\u0030-\u0034][\u0030-\u0039]|\u0032\u0035[\u0030-\u0035])\u002E){3}(?:[\u0030-\u0039]|[\u0031-\u0039][\u0030-\u0039]|\u0031[\u0030-\u0039]{2}|\u0032[\u0030-\u0034][\u0030-\u0039]|\u0032\u0035[\u0030-\u0035]))|(?:(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A){0,4}[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4})?\u003A{2}(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}|(?:(?:[\u0030-\u0039]|[\u0031-\u0039][\u0030-\u0039]|\u0031[\u0030-\u0039]{2}|\u0032[\u0030-\u0034][\u0030-\u0039]|\u0032\u0035[\u0030-\u0035])\u002E){3}(?:[\u0030-\u0039]|[\u0031-\u0039][\u0030-\u0039]|\u0031[\u0030-\u0039]{2}|\u0032[\u0030-\u0034][\u0030-\u0039]|\u0032\u0035[\u0030-\u0035]))|(?:(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A){0,5}[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4})?\u003A{2}[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}|(?:(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A){0,6}[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4})?\u003A{2})\u005D|(?:(?:[\u0030-\u0039]|[\u0031-\u0039][\u0030-\u0039]|\u0031[\u0030-\u0039]{2}|\u0032[\u0030-\u0034][\u0030-\u0039]|\u0032\u0035[\u0030-\u0035])\u002E){3}(?:[\u0030-\u0039]|[\u0031-\u0039][\u0030-\u0039]|\u0031[\u0030-\u0039]{2}|\u0032[\u0030-\u0034][\u0030-\u0039]|\u0032\u0035[\u0030-\u0035])|(?:[\u0041-\u005A\u0061-\u007A\u0030-\u0039](?:(?:[\u0041-\u005A\u0061-\u007A\u0030-\u0039\u002D]+)?[\u0041-\u005A\u0061-\u007A\u0030-\u0039])?|(?:[\u0041-\u005A\u0061-\u007A\u0030-\u0039](?:(?:[\u0041-\u005A\u0061-\u007A\u0030-\u0039\u002D]+)?[\u0041-\u005A\u0061-\u007A\u0030-\u0039])?\u002E)+[\u0041-\u005A\u0061-\u007A\u0030-\u0039](?:(?:[\u0041-\u005A\u0061-\u007A\u0030-\u0039\u002D]+)?[\u0041-\u005A\u0061-\u007A\u0030-\u0039])?))(?:\u003A(?:\u0030-\u0035\u0030-\u0039{0,4}|\u0036\u0030-\u0034\u0030-\u0039{3}|\u0036\u0035\u0030-\u0034\u0030-\u0039{2}|\u0036\u0035\u0035\u0030-\u0032\u0030-\u0039|\u0036\u0035\u0035\u0033\u0030-\u0035))?(?:\u002F(?:[\u0041-\u005A\u0061-\u007A\u0030-\u0039\u002D\u002E\u005F\u007E\u0021\u0024\u0026\u0027\u0028\u0029\u002A\u002B\u002C\u003B\u003D\u003A\u0040]|\u0025[\u0030-\u0039\u0041-\u0046\u0061-\u0066][\u0030-\u0039\u0041-\u0046\u0061-\u0066])*)*|\u002F(?:(?:[\u0041-\u005A\u0061-\u007A\u0030-\u0039\u002D\u002E\u005F\u007E\u0021\u0024\u0026\u0027\u0028\u0029\u002A\u002B\u002C\u003B\u003D\u003A\u0040]|\u0025[\u0030-\u0039\u0041-\u0046\u0061-\u0066][\u0030-\u0039\u0041-\u0046\u0061-\u0066])+(?:\u002F(?:[\u0041-\u005A\u0061-\u007A\u0030-\u0039\u002D\u002E\u005F\u007E\u0021\u0024\u0026\u0027\u0028\u0029\u002A\u002B\u002C\u003B\u003D\u003A\u0040]|\u0025[\u0030-\u0039\u0041-\u0046\u0061-\u0066][\u0030-\u0039\u0041-\u0046\u0061-\u0066])*)*)?|(?:[\u0041-\u005A\u0061-\u007A\u0030-\u0039\u002D\u002E\u005F\u007E\u0021\u0024\u0026\u0027\u0028\u0029\u002A\u002B\u002C\u003B\u003D\u003A\u0040]|\u0025[\u0030-\u0039\u0041-\u0046\u0061-\u0066][\u0030-\u0039\u0041-\u0046\u0061-\u0066])+(?:\u002F(?:[\u0041-\u005A\u0061-\u007A\u0030-\u0039\u002D\u002E\u005F\u007E\u0021\u0024\u0026\u0027\u0028\u0029\u002A\u002B\u002C\u003B\u003D\u003A\u0040]|\u0025[\u0030-\u0039\u0041-\u0046\u0061-\u0066][\u0030-\u0039\u0041-\u0046\u0061-\u0066])*)*)|[\u0041-\u005A\u0061-\u007A][\u0041-\u005A\u0061-\u007A\u0030-\u0039\u002B\u002D\u002E]*\u003A(?:\u002F{2}(?:(?:[\u0041-\u005A\u0061-\u007A\u0030-\u0039\u002D\u002E\u005F\u007E\u0021\u0024\u0026\u0027\u0028\u0029\u002A\u002B\u002C\u003B\u003D]|\u0025[\u0030-\u0039\u0041-\u0046\u0061-\u0066][\u0030-\u0039\u0041-\u0046\u0061-\u0066])*\u0040)?(?:\u005B(?:(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A){6}(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}|(?:(?:[\u0030-\u0039]|[\u0031-\u0039][\u0030-\u0039]|\u0031[\u0030-\u0039]{2}|\u0032[\u0030-\u0034][\u0030-\u0039]|\u0032\u0035[\u0030-\u0035])\u002E){3}(?:[\u0030-\u0039]|[\u0031-\u0039][\u0030-\u0039]|\u0031[\u0030-\u0039]{2}|\u0032[\u0030-\u0034][\u0030-\u0039]|\u0032\u0035[\u0030-\u0035]))|\u003A{2}(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A){5}(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}|(?:(?:[\u0030-\u0039]|[\u0031-\u0039][\u0030-\u0039]|\u0031[\u0030-\u0039]{2}|\u0032[\u0030-\u0034][\u0030-\u0039]|\u0032\u0035[\u0030-\u0035])\u002E){3}(?:[\u0030-\u0039]|[\u0031-\u0039][\u0030-\u0039]|\u0031[\u0030-\u0039]{2}|\u0032[\u0030-\u0034][\u0030-\u0039]|\u0032\u0035[\u0030-\u0035]))|(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4})?\u003A{2}(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A){4}(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}|(?:(?:[\u0030-\u0039]|[\u0031-\u0039][\u0030-\u0039]|\u0031[\u0030-\u0039]{2}|\u0032[\u0030-\u0034][\u0030-\u0039]|\u0032\u0035[\u0030-\u0035])\u002E){3}(?:[\u0030-\u0039]|[\u0031-\u0039][\u0030-\u0039]|\u0031[\u0030-\u0039]{2}|\u0032[\u0030-\u0034][\u0030-\u0039]|\u0032\u0035[\u0030-\u0035]))|(?:(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A)?[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4})?\u003A{2}(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A){3}(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}|(?:(?:[\u0030-\u0039]|[\u0031-\u0039][\u0030-\u0039]|\u0031[\u0030-\u0039]{2}|\u0032[\u0030-\u0034][\u0030-\u0039]|\u0032\u0035[\u0030-\u0035])\u002E){3}(?:[\u0030-\u0039]|[\u0031-\u0039][\u0030-\u0039]|\u0031[\u0030-\u0039]{2}|\u0032[\u0030-\u0034][\u0030-\u0039]|\u0032\u0035[\u0030-\u0035]))|(?:(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A){0,2}[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4})?\u003A{2}(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A){2}(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}|(?:(?:[\u0030-\u0039]|[\u0031-\u0039][\u0030-\u0039]|\u0031[\u0030-\u0039]{2}|\u0032[\u0030-\u0034][\u0030-\u0039]|\u0032\u0035[\u0030-\u0035])\u002E){3}(?:[\u0030-\u0039]|[\u0031-\u0039][\u0030-\u0039]|\u0031[\u0030-\u0039]{2}|\u0032[\u0030-\u0034][\u0030-\u0039]|\u0032\u0035[\u0030-\u0035]))|(?:(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A){0,3}[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4})?\u003A{2}[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}|(?:(?:[\u0030-\u0039]|[\u0031-\u0039][\u0030-\u0039]|\u0031[\u0030-\u0039]{2}|\u0032[\u0030-\u0034][\u0030-\u0039]|\u0032\u0035[\u0030-\u0035])\u002E){3}(?:[\u0030-\u0039]|[\u0031-\u0039][\u0030-\u0039]|\u0031[\u0030-\u0039]{2}|\u0032[\u0030-\u0034][\u0030-\u0039]|\u0032\u0035[\u0030-\u0035]))|(?:(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A){0,4}[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4})?\u003A{2}(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}|(?:(?:[\u0030-\u0039]|[\u0031-\u0039][\u0030-\u0039]|\u0031[\u0030-\u0039]{2}|\u0032[\u0030-\u0034][\u0030-\u0039]|\u0032\u0035[\u0030-\u0035])\u002E){3}(?:[\u0030-\u0039]|[\u0031-\u0039][\u0030-\u0039]|\u0031[\u0030-\u0039]{2}|\u0032[\u0030-\u0034][\u0030-\u0039]|\u0032\u0035[\u0030-\u0035]))|(?:(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A){0,5}[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4})?\u003A{2}[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}|(?:(?:[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4}\u003A){0,6}[\u0030-\u0039\u0041-\u0046\u0061-\u0066]{1,4})?\u003A{2})\u005D|(?:(?:[\u0030-\u0039]|[\u0031-\u0039][\u0030-\u0039]|\u0031[\u0030-\u0039]{2}|\u0032[\u0030-\u0034][\u0030-\u0039]|\u0032\u0035[\u0030-\u0035])\u002E){3}(?:[\u0030-\u0039]|[\u0031-\u0039][\u0030-\u0039]|\u0031[\u0030-\u0039]{2}|\u0032[\u0030-\u0034][\u0030-\u0039]|\u0032\u0035[\u0030-\u0035])|(?:[\u0041-\u005A\u0061-\u007A\u0030-\u0039](?:(?:[\u0041-\u005A\u0061-\u007A\u0030-\u0039\u002D]+)?[\u0041-\u005A\u0061-\u007A\u0030-\u0039])?|(?:[\u0041-\u005A\u0061-\u007A\u0030-\u0039](?:(?:[\u0041-\u005A\u0061-\u007A\u0030-\u0039\u002D]+)?[\u0041-\u005A\u0061-\u007A\u0030-\u0039])?\u002E)+[\u0041-\u005A\u0061-\u007A\u0030-\u0039](?:(?:[\u0041-\u005A\u0061-\u007A\u0030-\u0039\u002D]+)?[\u0041-\u005A\u0061-\u007A\u0030-\u0039])?))(?:\u003A(?:\u0030-\u0035\u0030-\u0039{0,4}|\u0036\u0030-\u0034\u0030-\u0039{3}|\u0036\u0035\u0030-\u0034\u0030-\u0039{2}|\u0036\u0035\u0035\u0030-\u0032\u0030-\u0039|\u0036\u0035\u0035\u0033\u0030-\u0035))?(?:\u002F(?:[\u0041-\u005A\u0061-\u007A\u0030-\u0039\u002D\u002E\u005F\u007E\u0021\u0024\u0026\u0027\u0028\u0029\u002A\u002B\u002C\u003B\u003D\u003A\u0040]|\u0025[\u0030-\u0039\u0041-\u0046\u0061-\u0066][\u0030-\u0039\u0041-\u0046\u0061-\u0066])*)*|\u002F(?:(?:[\u0041-\u005A\u0061-\u007A\u0030-\u0039\u002D\u002E\u005F\u007E\u0021\u0024\u0026\u0027\u0028\u0029\u002A\u002B\u002C\u003B\u003D\u003A\u0040]|\u0025[\u0030-\u0039\u0041-\u0046\u0061-\u0066][\u0030-\u0039\u0041-\u0046\u0061-\u0066])+(?:\u002F(?:[\u0041-\u005A\u0061-\u007A\u0030-\u0039\u002D\u002E\u005F\u007E\u0021\u0024\u0026\u0027\u0028\u0029\u002A\u002B\u002C\u003B\u003D\u003A\u0040]|\u0025[\u0030-\u0039\u0041-\u0046\u0061-\u0066][\u0030-\u0039\u0041-\u0046\u0061-\u0066])*)*)?|(?:[\u0041-\u005A\u0061-\u007A\u0030-\u0039\u002D\u002E\u005F\u007E\u0021\u0024\u0026\u0027\u0028\u0029\u002A\u002B\u002C\u003B\u003D\u003A\u0040]|\u0025[\u0030-\u0039\u0041-\u0046\u0061-\u0066][\u0030-\u0039\u0041-\u0046\u0061-\u0066])+(?:\u002F(?:[\u0041-\u005A\u0061-\u007A\u0030-\u0039\u002D\u002E\u005F\u007E\u0021\u0024\u0026\u0027\u0028\u0029\u002A\u002B\u002C\u003B\u003D\u003A\u0040]|\u0025[\u0030-\u0039\u0041-\u0046\u0061-\u0066][\u0030-\u0039\u0041-\u0046\u0061-\u0066])*)*)(?:\u003F(?:[\u0041-\u005A\u0061-\u007A\u0030-\u0039\u002D\u002E\u005F\u007E\u0021\u0024\u0026\u0027\u0028\u0029\u002A\u002B\u002C\u003B\u003D\u003A\u0040\u002F\u003F]|\u0025[\u0030-\u0039\u0041-\u0046\u0061-\u0066][\u0030-\u0039\u0041-\u0046\u0061-\u0066])*)?(?:\u0023(?:[\u0041-\u005A\u0061-\u007A\u0030-\u0039\u002D\u002E\u005F\u007E\u0021\u0024\u0026\u0027\u0028\u0029\u002A\u002B\u002C\u003B\u003D\u003A\u0040\u002F\u003F]|\u0025[\u0030-\u0039\u0041-\u0046\u0061-\u0066][\u0030-\u0039\u0041-\u0046\u0061-\u0066])*)?)$/

इसके उपयोग के कुछ कारण हैं, अर्थात् यह यूआरआई को मान्य नहीं करता है जिसमें उपयोगकर्ता नाम (जैसे "उपयोगकर्ता नाम: पासवर्ड") के बाद अतिरिक्त जानकारी होती है। इसके अलावा, केवल आईपीवी 6 पते को आईपी शाब्दिक सिंटैक्स के भीतर समाहित किया जा सकता है और "IPvFuture" सिंटैक्स को वर्तमान में अनदेखा किया गया है और इस नियमित अभिव्यक्ति के खिलाफ मान्य नहीं होगा। पोर्ट नंबर भी 0 और 65,535 के बीच होने के लिए विवश हैं। इसके अलावा, केवल फ़ाइल योजना ट्रिपल स्लैश (जैसे "फ़ाइल: /// आदि / sysconfig") का उपयोग कर सकती है और एक URI के क्वेरी और टुकड़े भागों दोनों को अनदेखा कर सकती है। अंत में, यह नियमित यूआरआई की ओर ध्यान दिया जाता है न कि आईआरआई, इसलिए एएससीआईआई के चरित्र सेट पर व्यापक ध्यान केंद्रित किया जाता है।

इस नियमित अभिव्यक्ति का विस्तार किया जा सकता है, लेकिन यह पहले से ही काफी जटिल और लंबा है। मैं यह भी गारंटी नहीं दे सकता कि यह "100% सटीक" या "बग फ्री" होने जा रहा है, लेकिन इसे सभी योजनाओं के लिए URI को सही ढंग से मान्य करना चाहिए।

आपको किसी भी योजना-विशिष्ट आवश्यकताओं के लिए अतिरिक्त सत्यापन करने की आवश्यकता होगी या यूआरआई सामान्यीकरण करना होगा क्योंकि यह नियमित अभिव्यक्ति यूआरआई की एक बहुत व्यापक श्रेणी को मान्य करेगी।


-2

अपने isValidURLफ़ंक्शन को निम्नानुसार संपादित करने का प्रयास करें :

function isValidURL(url) {
    var encodedURL = encodeURIComponent(url);
    var isValid = false;

    $.ajax({
      url: "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D%22" + encodedURL + "%22&format=json",
      type: "get",
      async: false,
      dataType: "json",
      success: function(data) {
        isValid = data.query.results != null;
      },
      error: function(){
        isValid = false;
      }
    });

    return isValid;
}

यह काम कर जाना चाहिए।


चूंकि अजाक्स async है, isValid हमेशा गलत, सही लौटेगा?
chepe263

नहीं। अजाक्स async है, लेकिन कॉल पर एक नज़र डालें। यह "async: false" निर्दिष्ट करता है।
ओहद

उनके प्रदर्शन निहितार्थ के कारण सिंक्रोनस कॉल को सबसे अच्छा टाला जाता है। साथ ही समस्या यह है कि यदि आपका नेटवर्क डाउन है तो यहां फ़ंक्शन गलत परिणाम देगा। इसके अलावा, यह आपके सभी यूआरएल को याहू को लीक भी कर देगा।
फिलिप क्लेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.