preg_match Ошибка разделителя - PullRequest
3 голосов
/ 20 декабря 2011

Добрый день, Я прочитал около 25 различных статей, в которых говорится о добавлении «/» или «~» и т. Д. Для разделителя, но без этой строки кода. Все, что я пробовал, все равно вызывает ошибку разделителя. Любая помощь будет принята с благодарностью. Спасибо за ваше время. Ниже приведен оригинальный код, который послужил причиной всех моих исследований.

$allowedHosts = array();

// self
$host = $_SERVER['HTTP_HOST'];
if( preg_match('\d+\.\d+\.\d+\.\d+', $host) ) {
    $allowedHosts[] = $host;
} else {
    $allowedHosts[] = '*.' . $host;
    $allowedHosts[] = $host;
}

Ответы [ 2 ]

4 голосов
/ 20 декабря 2011

Вам нужны разделители вокруг регулярного выражения:

if( preg_match('/\d+\.\d+\.\d+\.\d+/', $host) ) {

В этом случае я использовал /, что довольно стандартно.Но вы можете использовать и другие символы:

if( preg_match('@\d+\.\d+\.\d+\.\d+@', $host) ) {

A разделитель может быть любым не алфавитно-цифровым, без обратной косой черты, без пробела.в вашем регулярном выражении вы пытаетесь сопоставить IP-адрес, вы можете попробовать это вместо этого:

$IP = "198.168.1.78";
if (preg_match('/^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/',$IP)) {
    echo "Your IP address is ok.";
} else {
    echo "Wrong IP address.";
}
3 голосов
/ 20 декабря 2011

Похоже, вы пытаетесь проверить IP-адрес.

В PHP есть встроенная функция для этого ...

$validIp = filter_var($host, FILTER_VALIDATE_IP);
...