Как мне разрешить не www URL?

1

У меня есть это регулярное выражение. Как изменить его, чтобы разрешить не-www-адреса?

if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$link))
{
    echo '<label style="color:#fff">Sorry, your link is not in a valid address format.</label><br>';
    $error = 1;
}

Мне очень плохо в regex :(

  • 2
    Изменить www\. к (?:www\.)? ,
  • 0
    @stribizhev нет, текущее регулярное выражение также позволяет не www. адреса /.
Показать ещё 4 комментария
Теги:

1 ответ

2
Лучший ответ

Вам просто нужно указать, что www\. подшаблон является необязательным.

Чтобы сделать подшаблон необязательным, вы можете поместить его в группу без захвата и установить ? квантификатор после него. Таким образом, измените www\. to (?:www\.)? ,

См. Демонстрацию PHP

$link = "google.com";
if (!preg_match('/\b(?:(?:https?|ftp):\/\/|(?:www\.)?)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i',$link))
{ //                                       ^^^     ^^ - OPTIONAL GROUP
    echo '<label style="color:#fff">Sorry, your link is not in a valid address format.</label><br>';
    $error = 1;
}
else echo "Good link!"; // => Good link!
  • 1
    принято, извините за задержку
  • 0
    Нет проблем. Вы также можете использовать пустую альтернативу, но поскольку это не Python, более эффективно использовать дополнительные группы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню