#php
#php
Вопрос:
Я хочу найти наиболее легкое решение для проверки строки как a letter or number
?
. Например: a?
или 1?
и т. Д.
Комментарии:
1. Существует ли действительно сложное решение для проверки всего 2 символов?
2. Вы можете заглянуть в регулярное выражение. вот несколько примеров того, как это работает
Ответ №1:
if (preg_match('/^[a-z0-9]?$/', $str)) {
// yup, it's a letter or number ?
}
Комментарии:
1. Вы также можете добавить модификатор i, чтобы также перехватывать символы верхнего регистра.
2. Регулярное выражение, вероятно, не самое легкое решение здесь? В любом случае добавьте символ
i
в конце шаблона, чтобы сделать его нечувствительным к регистру.3. Что бы ни подразумевал OP под «легковесностью»… И да,
/i
может быть или не быть подходящим, я оставлю это на усмотрение OP.
Ответ №2:
немного быстрее, чем регулярное выражение, является функцией:
// return true or false
function validate($str) {
$str0 = ord($str[0]);
return(
(
($str0 >= 97 amp;amp; $str0 <= 122) or
($str0 >= 48 amp;amp; $str0 <= 57)
) amp;amp;
(
$str[1] == '?'
)
);
}
Комментарии:
1. Поскольку вы отредактировали свой ответ, теперь ваше решение намного быстрее. Проверьте это: порядок времени: 0.169085025787 Время регулярного выражения: 0.260627031326
Ответ №3:
Некоторое время назад я написал класс облегченной проверки. Может быть, вы сможете это использовать.
Например:
$oValidator = new Validator();
$oValidator->isValid('a', 'alpha_numeric|max_length[1]'); //true
$oValidator->isValid('1', 'alpha_numeric|max_length[1]'); //true
$oValidator->isValid('ab', 'alpha_numeric|max_length[1]'); //false
$oValidator->isValid('1337', 'alpha_numeric|max_length[1]'); //false
Пример:
http://sklueh.de/2012/09/ облегченный-валидатор-в-php/
Ответ №4:
Хорошо, это самый быстрый способ
$allowed_char = Array();
for($i=ord('a');$i<=ord('z');$i ) $allowed_char[chr($i)] = true;
for($i=ord('0');$i<=ord('9');$i ) $allowed_char[chr($i)] = true;
function validate($str) {
global $allowed_char;
return $allowed_char[$str[0]] amp;amp; $str[1] == '?' amp;amp; !isset($str[2]);
}
Регулярное выражение = 2.0147299766541с
Это решение = 1.6041090488434с
Так что это на 20% быстрее, чем решение для регулярных выражений 🙂
Комментарии:
1. Включая построение массива? Почему бы не создать полную статическую таблицу поиска? Кстати, «легкий» не обязательно означает «самый быстрый». ; o)