Qualcuno ha un'espressione regolare per la convalida degli URL (NON per trovarli all'interno di un passaggio di testo)? Lo snippet di JavaScript sarebbe preferibile.Espressione regolare per la convalida degli URL (in JavaScript)
risposta
La sintassi URL reale è piuttosto complicato e non facile da rappresentare in regex. La maggior parte dei regex dall'aspetto semplice fornirà molti falsi negativi e falsi positivi. Vedere per divertimento these efforts ma anche il risultato finale non è buono.
Inoltre in questi giorni si sarebbe generalmente desidera consentire IRI così come vecchia scuola URI, in modo che possiamo creare un collegamento a indirizzi validi come:
http://en.wikipedia.org/wiki/Þ
http://例え.テスト/
andrei solo per semplici controlli: ha inizio con un metodo ben noto: nome? È privo di spazi e doppi apici? Se è così allora, probabilmente è abbastanza buono.
Prova questa regex, funziona per me:
function isUrl(s) {
var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
return regexp.test(s);
}
mi piacerebbe essere sicuri che non voglio entrare falsi negativi con questo regex. Non hai avuto problemi con esso? –
Nessun problema ancora. Perché non condurre test sui falsi positivi che anticipi? – ennuikiller
Si * dare * un falso negativo per simboli come ';' nella query, * tranne * che è un grande grande '\ S +' nel mezzo dell'espressione che può espandersi per adattarsi a qualsiasi cosa, e non è ancorato alla fine in modo da poter inserire qualsiasi assurdità finale. es. 'Http: // @' o 'http: // Ho un bel mucchio di "noci di cocco"' sono 'validi'. – bobince
Prova questa regex
/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
E funziona meglio per me.
Penso che è la migliore espressione regolare per la convalida dell'url –
Questo non funziona per i seguenti URL: www.google.com, gogl.com, http: //google.clo, www.google.co.in, www.goo.com.in.ssd –
Questo codice non funzionerà per molti URL. Quando si individuano gli URL, è meglio fare affidamento su una libreria specializzata. y] (http://stackoverflow.com/a/21925491/1269037). –
Nel accepted answerbobince risolto correttamente: la convalida del solo nome schema,: //, e spazi e doppi apici è in genere sufficiente. Ecco come la convalida può essere implementato in JavaScript:
var url = 'http://www.google.com';
var valid = /^(ftp|http|https):\/\/[^ "]+$/.test(url);
// true
o
var r = /^(ftp|http|https):\/\/[^ "]+$/;
r.test('http://www.goo le.com');
// false
o
var url = 'http:www.google.com';
var r = new RegExp('/^(ftp|http|https):\/\/[^ "]+$/');
r.test(url);
// false
Riferimenti per la sintassi:
-1 per il collegamento w3schools –
@DerekHenderson Ecco qua, W3Schools hater;) –
+1 per ottenere un -1 non necessario per l'odio di W3Schools. – MaxArt
<html>
<head>
<title>URL</title>
<script type="text/javascript">
function validate() {
var url = document.getElementById("url").value;
var pattern = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
if (pattern.test(url)) {
alert("Url is valid");
return true;
}
alert("Url is not valid!");
return false;
}
</script>
</head>
<body>
URL :
<input type="text" name="url" id="url" />
<input type="submit" value="Check" onclick="validate();" />
</body>
</html>
Questo codice non funzionerà per molti URL. Quando si convalidano gli URL, è meglio fare affidamento su una libreria specializzata. [Ecco perché] (http://stackoverflow.com/a/21925491/1269037). –
L'utilizzo di JavaScript puro è l'opzione migliore per le convalide se si desidera personalizzare il modello è possibile farlo facilmente nel modello. – Swapnil
Io uso il/^ [a-z] + [^:] + $/i delle espressioni regolari per la convalida degli URL. Guarda un esempio del mio codice cross-browser InputKeyFilter con convalida URL.
<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Input Key Filter Test</title>
\t <meta name="author" content="Andrej Hristoliubov [email protected]">
\t <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
\t
\t <!-- For compatibility of IE browser with audio element in the beep() function.
\t https://www.modern.ie/en-us/performance/how-to-use-x-ua-compatible -->
\t <meta http-equiv="X-UA-Compatible" content="IE=9"/>
\t
\t <link rel="stylesheet" href="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.css" type="text/css"> \t \t
\t <script type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/Common.js"></script>
\t <script type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.js"></script>
\t
</head>
<body>
URL:
<input type="url" id="Url" value=":"/>
<script>
\t CreateUrlFilter("Url", function(event){//onChange event
\t \t \t inputKeyFilter.RemoveMyTooltip();
\t \t \t var elementNewInteger = document.getElementById("NewUrl");
\t \t \t elementNewInteger.innerHTML = this.value;
\t \t }
\t \t
\t \t //onblur event. Use this function if you want set focus to the input element again if input value is NaN. (empty or invalid)
\t \t , function(event){ this.ikf.customFilter(this); }
\t);
</script>
New URL: <span id="NewUrl"></span>
</body>
</html>
vedere anche la mia pagina example of the input key filter.
Non funziona. Segnala questo valido. h: //google.com –
h: //google.com è un URL valido. "h:" è prefisso valido Vedere https://www.w3.org/Addressing/URL/url-spec.txt per i dettagli. Esempi di URL valido: mailto: [email protected] https://google.com Se si desidera filtrare solo Hypertext Transfer Protocol, è necessario utilizzare/^ http: \/\/[^:] + $/i espressione regolare – Andrej
prova con questo:
var RegExp =/^(?:(?:https?|ftp):\/\/)(?:\S+(?::\S*)[email protected])?(?:(?!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\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;
/(?:http[s]?\/\/)?(?:[\w\-]+(?::[\w\-]+)[email protected])?(?:[\w\-]+\.)+(?:[a-z]{2,4})(?::[0-9]+)?(?:\/[\w\-\.%]+)*(?:\?(?:[\w\-\.%]+=[\w\-\.%!]+&?)+)?(#\w+\-\.%!)?/
Penso che la tua espressione manchi un ':' tra il protocollo e '//'. Altrimenti, funziona bene! –
Dopo una lunga ricerca ho costruito questa espressione reg. Spero che aiuti anche gli altri .......
url = 'https://google.co.in';
var re = /[a-z0-9-\.]+\.[a-z]{2,4}\/?([^\s<>\#%"\,\{\}\\|\\\^\[\]`]+)?$/;
if (!re.test(url)) {
alert("url error");
return false;
}else{
alert('success')
}
I downvoters spiegano il motivo del downvoting – Aamir
Ho trovato un certo successo con questo:
/^((ftp|http|https):\/\/)?www\.([A-z]+)\.([A-z]{2,})/
- controlla uno o nessuno dei seguenti: ftp: //, http: // o https: //
- Richiede www.
- Controlla qualsiasi numero di caratteri validi.
- Infine, controlla che abbia un dominio e che il dominio sia di almeno 2 caratteri.
ovviamente non è perfetto, ma è gestita miei casi abbastanza bene
Prova questo funziona per me:
/^(http[s]?:\/\/){0,1}(w{3,3}\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/;
- 1. Espressione regolare: convalida degli indirizzi Gmail
- 2. espressione regolare per la convalida prezzo
- 3. Espressione regolare per la convalida della password
- 4. Espressione regolare per la convalida dell'indirizzo IP
- 5. Espressione regolare Javascript per la punteggiatura (internazionale)?
- 6. Migliore espressione regolare per la convalida dell'e-mail in C#
- 7. Espressione regolare per la convalida del campo indirizzo
- 8. Espressione regolare - qualsiasi testo in URL friendly
- 9. Espressione regolare Javascript corrispondenza multipla
- 10. Espressione regolare per la convalida di un URL di una pagina facebook
- 11. espressione regolare insensibile alle maiuscole in javascript
- 12. Espressione regolare Javascript per convalidare l'URL
- 13. Espressione regolare Javascript per valori rgb
- 14. Javascript Espressione regolare Rimuovi spazi
- 15. Converti espressione regolare Javascript in sintassi Java
- 16. Espressione regolare per consentire la barra rovesciata in C#
- 17. Espressione regolare per importo in dollari in JavaScript
- 18. espressione regolare per trovare gli URL all'interno di una stringa
- 19. Espressione regolare per acronimi
- 20. Espressione regolare per ottenere una stringa tra parentesi in Javascript
- 21. Espressione regolare per l'analisi hashtag in Java
- 22. espressione regolare per tempo
- 23. Espressione regolare per corrispondenza "|"
- 24. Espressione regolare per formato data- gg-mm-aaaa in Javascript
- 25. javascript nuova espressione regolare da stringa
- 26. Espressione regolare Javascript - stringa su oggetto RegEx
- 27. Espressione regolare condizionale Javascript if-then-else
- 28. Espressione regolare per trovare un'espressione regolare?
- 29. espressione regolare non funziona con javascript
- 30. Aggiornamento degli indirizzi di posta elettronica in MySQL (espressione regolare?)
Ok. Almeno ora so che probabilmente non ne vale la pena nella maggior parte dei casi:] Grazie. –
/(ftp | https?): \/\/[^ "] + $/ –
In effetti, il modo corretto per convalidare gli URL non è quello di utilizzare un'espressione regolare. Controlla il [codice di convalida dell'URI in Node.js] (https://github.com/joyent/node/blob/master/lib/url.js). È molto più complesso di una regexp, motivo per cui è sempre meglio usare una libreria specializzata piuttosto che eseguire la propria espressione regolare. –