PHP Регулярные выражения Помогите

170
01 июня 2018, 08:00

Есть код

$url = "youtube.com/watch?v=ТУТ КАКОЙ ТО ТЕКСТ";

С помощью рег.выражения нужно проверить задана ли такая ссылка, вместо "ТУТ КАКОЙ ТО ТЕКСТ" должно быть что угодно, что допускается в ссылке ($url), любой текст или цифры

$url2 = "youtube.com/watch?v=";
preg_match("#^(https?://)?youtube.com/watch\?v=.*$#", $url2);

Данный код почему то выдает true даже на $url2, хотя так не должно быть

Answer 1

Данный код почему то выдает true даже на $url2, хотя так не должно быть

Это происходит из-за минимальности квантификатора *, который делает дальнейшее совпадение в подстроке не обязательным, даже если совпадение есть. Замените * на +, и шаблон будет учитывать подстроку после v=:

$str = 'youtube.com/watch?v=';
$patt = '~^(?:https?://)?youtube.com/watch\?v=.+$~';
var_dump( (bool) preg_match($patt, $str) );

Результат:

boolean false
READ ALSO
Не работает форма голосования на php

Не работает форма голосования на php

Не могу понять, чего когда голосуешь, не отображается результат?

184
Создать цикл foreach с несколькими элементами

Создать цикл foreach с несколькими элементами

Есть код который выводит значения только одного элемента (wdo_tab_title):

208
Как исправить ошибку Fatal error: Uncaught PDOException: invalid data source name in?

Как исправить ошибку Fatal error: Uncaught PDOException: invalid data source name in?

Нужно подключится к базе данных sqliteВыдает ошибку:

217
Переменные из INPUT в SQL запрос

Переменные из INPUT в SQL запрос

Есть поля Input с типом datatime-local

189