PHP проверяет облегченную строку

#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/

github:
https://github.com/sklueh/Облегченный-PHP-Validator

Ответ №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)