php preg_match URL regex не работает - PullRequest
1 голос
/ 15 ноября 2011

Я не могу заставить эту функцию работать правильно:

function isValidURL($url){
 return preg_match('%http://domain\.com/([A-Za-z0-9.-_]+)/([A-Za-z0-9.-_]+)%', $url);
}

URL:

http://domain.com/anything-12/anything-12/

может содержать цифры, буквы и символы _ -

Я предполагаю, что это связано с первым регулярным выражением - как эти работы

    http://domain.com/anything12/anything12/

    http://domain.com/anything12/anything-12/

    http://domain.com/anything12/any-thing-12/

    http://domain.com/anything_12/any-thing-12/

Как всегда, вся помощь приветствуется и спасибо заранее.

1 Ответ

5 голосов
/ 15 ноября 2011
  1. Вам необходимо экранировать - в классе символов вашего регулярного выражения.

  2. Вам необходимо привязать свое регулярное выражение, чтобы оно пыталось сопоставить всю входную строку, а не ее часть.

Модифицированное регулярное выражение:

'%^http://domain\.com/([A-Za-z0-9.\-_]+)/([A-Za-z0-9.\-_]+)/$%'

Вы можете сократить свое регулярное выражение, отметив, что [A-Za-z0-9_] совпадает с \w, а также есть повторяющееся под Регулярное выражение.

'%^http://domain\.com(/[\w.-]+){2}/$%'
...