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

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

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

if (ereg("[A-Za-z0-9]\.\#\-\$", $buffer) === false) { echo "buffer only contains valid characters: az, AZ, 0-9, #, -, ., $"; } 

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

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

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

Только разрешение символов az в верхнем или нижнем регистре.

 if (preg_match("/[^A-Za-z]/", $FirstName)) { echo "Invalid Characters!"; } 

Добавление номеров ..

 if (preg_match("/[^A-Za-z0-9]/", $FirstName)) { echo "Invalid Characters!"; } 

Добавление дополнительных символов, чтобы разрешить (в этом случае восклицательный знак).

(Дополнительным символам должно предшествовать «\», как показано.)

 if (preg_match("/[^A-Za-z0-9\!]/", $FirstName)) { echo "Invalid Characters!"; } 

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

 if (preg_match('/[^a-z0-9.#$-]/i', $buffer)) print "Invalid characters found"; 

Вам нужно перейти к использованию 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: az, AZ, 0-9, #, -, ., $"; } } 

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

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

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 }