URL Regex

Tags:    regex javascript

Hej udviklere,

Jeg er igang med at udvide jquery's validator plugin da deres URL validator stinker.

Fold kodeboks ind/udJScript kode 


Her er hvad jeg har sofar. Jeg kan ikke rigtigt finde fejlen, men den er der tilsyneladende :) har lavet den vha. regexpal.com og den melder alt er fint :)

Håber der er nogle som kan hjælpe..



10 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato
Solved:

Fold kodeboks ind/udJScript kode 




Ja, det var da vist heller ikke et særlig børnevenligt regexp du havde valgt til at starte med :) Men dit nuværende kan vel kun pege på et site ikke på en underside eller en direkte side, kan det?



Ja den blev minificeret lidt :-)

Formålet med den er at bruge den i en formular hvor firmaer taster deres hjemmeside ind. Det den skal tage er:

http://example.com
http://www.example.com
https://example.com
https://www.example.com
example.com
www.example.com



jQuery's eksempel er nu engang meget bedre, men din syntax er forkert.

Prøv fremover at wrapper dine JS regex ind i /[regex]/[options] ex for jquery's

var pattern = /^((http:\/\/|https:\/\/)?)+[A-Za-z0-9.-]+\.(dk|com)(:[0-9]+)?((\/([~0-9a-zA-Z\#\+\%@\.\/_-]+)?(\?[0-9a-zA-Z\+\%@\/&\[\];=_-]+)?)?)?$/;

Hvorfor du har multiline accepteret på dit syntes jeg heller ikke giver den store mening.

Den her er jo ikke gyldig:

var pattern = /^((http:\/\/|https:\/\/)?)+[A-Za-z0-9\.-]+\.([A-Za-z]{0,6})$/m;
alert(pattern.test("www.billgates.microsoft.com\nwww.google.com\t/http.skod"));

/J







Indlæg senest redigeret d. 14.11.2011 16:51 af Bruger #5789
Hej Jokke,

Tusinde tak for dit svar.

Jeg skal ærligt erkende at jeg er en hat til regex. Multiline er med af den simple årsag at den fejler, for some reason, hvis jeg ikke har den på.

Jeg har taget udgangspunkt i denne side: http://mathiasbynens.be/demo/url-regex

Hvis du kan supplere med en bedre regex til formålet så vil jeg være glad :-)



JEg syntes også selv regex er svært, og bruger selv den gode gamle copy/paste fra andre websites :) med lidt modifikationer.

Er det en domæne tester eller url tester du er ude efter ?

En virksomhed kan jo i værste tilfælde have en billigekatte.minhjemmeside.dk/fil.ext?page=1

/J



Ja altså, principielt skal den kunne tage ovenstående. Vigtigste er dog at den kan frasortere mail adresser..

Den skal tage:

http://foo.com/
http://foo.com/blah_blah
http://foo.com/blah_blah_(wikipedia)
http://foo.com/blah_(wikipedia)#cite-1
http://www.example.com/wpstyle/?p=364
https://www.example.com/foo/?bar=baz&inga=42&quux
http://142.42.1.1/
http://142.42.1.1:8080/

Kan ikke lige komme i tanke om flere :-)



Prøv lige den her:

var pattern = /((http(s?):\/\/)|(www\.[^ \[\]\(\)\n\r\t]+)|(([012]?[0-9]{1,2}\.){3}[012]?[0-9]{1,2})\/)([^ \[\]\(\),;"'<>\n\r\t]+)([^\. \[\]\(\),;"'<>\n\r\t])|(([012]?[0-9]{1,2}\.){3}[012]?[0-9]{1,2})/

kilde/modded fra www.regexlib.com



Den funger kun på url som inkludere både http og www..

http://bit.ly/tnsxBG



det giver ikke nogen mening at sige at asdgasdgasdg.asdgsdg er en url.. men du kan bare pakke www\. ind i [] så det bliver

var pattern = /((http(s?):\/\/)|([www\.][^ \[\]\(\)\n\r\t]+)|(([012]?[0-9]{1,2}\.){3}[012]?[0-9]{1,2})\/)([^ \[\]\(\),;"'<>\n\r\t]+)([^\. \[\]\(\),;"'<>\n\r\t])|(([012]?[0-9]{1,2}\.){3}[012]?[0-9]{1,2})/

Men så kan du jo lige så godt bare validere på at der ikke står mailto:// ftp:// imap:// etc.

/J




t