AnrDaemon
Продвинутый новичок
Наткнулся тут на кусочек кода, который явно писался под девизом "избегайте регулярных выражений, они замедляют ваш код!"
Задача - проверить строку на валидность (использование только разрешённых символов).
Соответственно, код
Мне лично пришлось минут пять вкуривать в описание функции.
Ради интереса, сварганил тестик:
Ну и? За что, спрашивается, боролись?…
Задача - проверить строку на валидность (использование только разрешённых символов).
Соответственно, код
PHP:
if(strlen($string) > strspn($string, $mask)) ...
Ради интереса, сварганил тестик:
PHP:
<?php
for( $i = 0 ; $i < 10000 ; $i++ )
{
$ARR[$i] = sprintf('%08X', $i);
}
// lower(STRSPN) on a string
$start = microtime(true);
for( $i = 0 ; $i < 10000 ; $i++ )
{
strlen($ARR[$i]) != strspn(strtolower($ARR[$i]), '0123456789abcdef');
}
$crc = microtime(true) - $start;
printf("%-11s %0.2f\n", "STRSPN+l", $crc);
unset($ARX);
// STRSPN on a string
$start = microtime(true);
for( $i = 0 ; $i < 10000 ; $i++ )
{
strlen($ARR[$i]) != strspn($ARR[$i], '0123456789ABCDEFabcdef');
}
$crc = microtime(true) - $start;
printf("%-11s %0.2f\n", "STRSPN", $crc);
unset($ARX);
// PREG_MATCH on a string
$start = microtime(true);
for( $i = 0 ; $i < 10000 ; $i++ )
{
preg_match('#[^0-9a-f]#i', $ARR[$i], $_s);
}
$crc = microtime(true) - $start;
printf("%-11s %0.2f\n", "PREG_MATCH", $crc);
unset($ARX);
Код:
STRSPN+l 0.09 A
STRSPN 0.07
PREG_MATCH 0.05