Убедитесь, что строка не содержит http (s) и не начинается с косой черты

Я пытаюсь добавить корневой URL к URL перенаправления, но ТОЛЬКО если он не содержит http или же https А ТАКЖЕ не начать с /,

У меня есть этот код, который появляется работать:

$redirect_url = '/foo';

if (!preg_match('#https?://|^/#', $redirect_url)) {
$redirect_url = 'http://' . $redirect_url;
}

Но мне интересно, вместо того, чтобы использовать | персонаж для OR я не должен использовать AND — но я не уверен, как в регулярных выражениях?

1

Решение

Вы можете избежать использования | используя это регулярное выражение:

^(https?:/)?/

В коде:

if (!preg_match('#^(https?:/)?/#', $redirect_url)) {
$redirect_url = 'http://' . $redirect_url;
}

RegEx Demo

2

Другие решения

Просто измените свое регулярное выражение на,

if (!preg_match('#^(?:https?://|/)#', $redirect_url)) {
$redirect_url = 'http://' . $redirect_url;
}

DEMO

1

Не уверен, что понимаю ваши потребности, но вы этого хотите?

if (preg_match('#(?!.*https?://)(?!^/)#', $redirect_url)) {
$redirect_url = 'http://' . $redirect_url;
}
1
По вопросам рекламы [email protected]