Regexp и пустое значение

rudik

Developer
Regexp и пустое значение

Есть задача - проверить регулярным выражением вводимый URL адрес. Допустимые значения - начинается с http:// или ftp:// или /
после / может не стоять ни единого символа, а после http:// и ftp:// должны стоять символы.

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

Вот сам regexp :
^((http://)|(ftp://)[a-zA-Z0-9_\./]+)|(/[a-zA-Z0-9_\./]*)$
но как сделать так, чтоб он еще давал true на пустое значение?
 

Demiurg

Guest
ты не поверишь,
^((http://)|(ftp://)[a-zA-Z0-9_\./]+)|(/[a-zA-Z0-9_\./]*)|$
 

rudik

Developer
Вот, спасибо, а я в конце ставил |() и мучался, очень, очень долго.
 

rudik

Developer
А вот и не правильно!
Приведенное Demiurgom регулярное выражение принимает просто латинские символы, а вот такое - нет
(^(http://)|(ftp://)[a-zA-Z0-9_\./]+$)|(^/[a-zA-Z0-9_\./]*$)|(^$)

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

LAMborginy

Guest
Вот писал регулярку по поиску и разбиванию адреса...

preg_match("%(http:\/\/|ftp:\/\/)?([-_:.a-z0-9]+\.[-_:.a-z0-9]+)?(\/)?([-_:.a-z0-9/]+/)?(.*)?%i",$url,$arr);
 
Сверху