проблема с устаревшим eregi - PullRequest
0 голосов
/ 10 февраля 2011

Я обновил PHP, и теперь я получаю eregi устарелые ошибки.

Я провел поиск в Интернете и обнаружил, что вместо этого могу использовать preg, но не уверен, как правильно изменить этот код

eregi("^$row->baseUrl", $_SERVER["SCRIPT_NAME"])

моя попытка:

preg_match("^$row->baseUrl/i", $_SERVER["SCRIPT_NAME"])

но я не уверен, правильно ли это.

Может кто-нибудь проверить и посоветовать?

Ответы [ 2 ]

1 голос
/ 10 февраля 2011

Регулярные выражения вообще не нужны:

strcasecmp(substr($_SERVER["SCRIPT_NAME"], 0, strlen($row->baseUrl)), $row->baseUrl) === 0

Получает префикс $_SERVER["SCRIPT_NAME"] с максимальной длиной $row->baseUrl и использует strcasecmp для сравнения без учета регистра.

Но если вы хотите использовать регулярные выражения с PHP-функциями PHPRE , вам нужно использовать разделители (здесь /, как вы пытались) и правильно указать значение:

"/^".preg_quote($row->baseUrl, "/")."/i"
0 голосов
/ 11 февраля 2011

Как сказал Гамбо, вам не нужно использовать регулярные выражения для вашей конкретной задачи. Тем не менее, вы должны использовать stripos() для поиска строк.

<?php
// script name is at the start of the string
stripos("{$_SERVER['SCRIPT_NAME']}/", $row->baseUrl) === 0; 
// or; string name exists within the string
stripos("{$_SERVER['SCRIPT_NAME']}/", $row->baseUrl) !== false;

Вы также можете использовать strpos(), который является чувствительным к регистру эквивалентом.

Если вы хотите использовать preg_match, ваше регулярное выражение должно быть:

preg_match("#^{$_SERVER['SCRIPT_NAME']}/#i", $row->baseUrl) === 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...