Validate URL Regular expression

1

I would like to know the following, I have a regular expression to validate URLs, but I would like that besides validating the URL, it would release if the URL is empty or with blanks:

I think the idea was this, but when I run Delphi, empty URLs and empty URLs do not work

^[\s]*$|/(((http|ftp|https):\/{2})+(([0-9a-z_-]+\.)+(aero|asia|biz|cat|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|pro|tel|travel|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cx|cy|cz|cz|de|dj|dk|dm|do|dz|ec|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mn|mn|mo|mp|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|nom|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ra|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw|arpa)(:[0-9]+)?((\/([~0-9a-zA-Z\#\+\%@\.\/_-]+))?(\?[0-9a-zA-Z\+\%@\/&\[\];=_-]+)?)?))\b/imuS

Testing over the internet works, but when used in Delphi, it does not validate the blanks or even if the string is empty, only the URL it validates.

Is this a problem in Delphi?

    
asked by anonymous 09.08.2015 / 13:49

1 answer

1

Considerations :
I do not see a need for such a large regex, in this case I would define a URL with something starting with the prefix http OR https OR ftp, followed by ": // www." address and end ".com", ".br", ".gov", etc.

For cases that contain blank or empty spaces, you would use an OU token after the URL expression, so if it was not the pattern you want, it would check whether it is HTTP OR FTP OR an empty field (note that I am using the sequence of more specific characters before and after the most common ones, this is not by chance see here why) p>

So I would use this expression:

( *?https{0,1}:\/\/w{0,3}.*| *?ftp:\/\/w{0,3}.*| *?\n|^$)

You can test it here.

    
26.08.2017 / 00:15