PHP: самый быстрый способ проверить на недопустимые символы (все кроме a-z, A-Z, 0-9, #,-., $)?

Я должен проверить буферный вход к серверу сокета PHP максимально быстро. Для этого я должен знать, содержит ли $buffer входного сигнала какой-либо другой символ (символы), чем следующее: a-z, A-Z, 0-9, #,-. и $

Я в настоящее время использую следующую функцию ereg, но задаюсь вопросом, существуют ли способы оптимизировать скорость. Я должен, возможно, использовать другую функцию или другой regex?

if (ereg("[A-Za-z0-9]\.\#\-\$", $buffer) === false)
{
    echo "buffer only contains valid characters: a-z, A-Z, 0-9, #, -, ., $";
}
10
задан hakre 13 August 2012 в 12:04
поделиться

5 ответов

Попробуйте эту функцию:

function isValid($str) {
    return !preg_match('/[^A-Za-z0-9.#\\-$]/', $str);
}

[^ A-Za-z0-9. # \ - $] описывает любой недопустимый символ. Если preg_match находит совпадение (недопустимый символ), он вернет 1 и 0 в противном случае. Кроме того, ! 1 является ложным , а ! 0 является истинным . Таким образом, isValid возвращает false , если обнаружен недопустимый символ, и true в противном случае.

34
ответ дан 3 December 2019 в 13:22
поделиться

Семейство функций preg немного быстрее, чем ereg . Чтобы проверить недопустимые символы, попробуйте что-нибудь вроде:

if (preg_match('/[^a-z0-9.#$-]/i', $buffer)) print "Invalid characters found";
3
ответ дан 3 December 2019 в 13:22
поделиться

preg_match быстрее и мощнее, чем ereg:

if(preg_match('/^[^a-z0-9\.#\-\$]*$/i', $sString) > 0) //check if (doesn't contain illegal characters) is true
{
  //everything's fine: $sString does NOT contain any illegal characters
}

или измените его:

if(preg_match('/[a-z0-9\.#\-\$]/i', $sString) === 0) //check if (contains illegal character) is false
{
  //everything's fine: $sString does NOT contain any illegal characters
}
1
ответ дан 3 December 2019 в 13:22
поделиться

Вы захотите перейти на использование preg вместо ereg . Семейство функций ereg устарело, и (начиная с php 5.3) их использование будет вызывать предупреждение PHP, и вскоре они будут удалены с языка. Кроме того, неофициально было сказано, что функции preg в целом быстрее, чем ereg.

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

//pseudo code based on OP 
function isValidForMyNeeds($buffer)
{
    if (ereg("[A-Za-z0-9]\.\#\-\$", $buffer) === false)
    {
        echo "buffer only contains valid characters: a-z, A-Z, 0-9, #, -, ., $";
    }
}

, а затем, когда / если вы определите, что это проблема производительности, вы можете применить любую необходимую оптимизацию в одном месте.

3
ответ дан 3 December 2019 в 13:22
поделиться

Используйте preg isntead, его быстрее и ereg производство прекращено.

1
ответ дан 3 December 2019 в 13:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: