Как насчет этого?
/^http:\/\/\w+(\.\w+)*(:[0-9]+)?\/?(\/[.\w]*)*$/
будет соответствовать: http://domain.com:port/path
или просто http://domain
или http://domain:port
/^http:\/\/\w+(\.\w+)*(:[0-9]+)?\/?$/
матч URL-адресов без пути
Некоторые объяснения регулярных выражений блоков:
Домен:\w+(\.\w+)*
для сопоставления текста с точками: localhost
или www.yahoo.com
(может быть до тех пор, как Путь или порт начинает секции)
Порт:(:[0-9]+)?
, чтобы соответствовать или не соответствовать номеру, начиная с точкой с запятой: :8000
(и это может быть только один)
Путь:\/?(\/[.\w]*)*
, чтобы соответствовать любым alphanums с косой чертой и точками: /user/images/0001.jpg
(до конца строки)
(путь очень интересная часть, теперь я сделал это, чтобы позволить одиночек или соседние точки, т.е. такие выражения могут быть возможны: /.
или /./
или /.../
и т.д. Если вы хотите, чтобы иметь точки в пути как в домен раздел - без граничных или смежных точек, затем используйте \/?(\/\w+(.\w+)*)*
regexp, аналогично домен часть.)
* ОБНОВЛЕНО *
Кроме того, если вы хотели бы иметь (действительно) -
символы в вашем URL (или любой другой), вам следует просто расширить символьный класс для «URL текста соответствие ", то есть \w+
должно стать [\-\w]+
и так далее.
возможный дубликат [Что такое лучший регулярное выражение для проверки, если строка является допустимым URL?] (http://stackoverflow.com/questions/161738/what-is-the-best-r egular-expression-to-check-if-a-string-is-a-valid-url) – Kosmetika