Я должен проверить вход буфера на сервер сокетов 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 .
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 }