PHP: оптимизировать regexp + substr - PullRequest
1 голос
/ 17 июля 2009

Есть ли способ оптимизировать следующий код PHP, чтобы я мог использовать только preg_replace, а не preg_replace + substr?

$type = substr( preg_replace('/([^a-z])/', '$2', strtolower($_GET["type"])) , 0, 3);

Ответы [ 2 ]

1 голос
/ 17 июля 2009

Как отмечали в комментариях люди, ваш пример кода в некотором роде неисправен, но если я понимаю, что вы хотите сделать правильно (получите первые три строчных буквенных символа), то это должно сделать это:

$type = preg_replace('/.*?([a-z])(?:.*?([a-z]))?(?:.*?([a-z]))?.*/', '$1$2$3', strtolower($_GET['type']));
0 голосов
/ 17 июля 2009

Если честно, я бы сказал проще и предупредил бы пользователя, если он ввел неверную строку:

$type = $_GET['type'];
if (!preg_match('/^[a-z]{0,3}$/', $type)) {
    // Handle error properly here.
    die('Type argument must be a string of 0-3 lower case letters (a-z)');
}

Если вы действительно хотите исправить ввод, тогда ваше оригинальное решение было в порядке, его можно просто немного почистить:

$type = substr(preg_replace('/[^a-z]+/', '', strtolower($_GET['type'])), 0, 3);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...