Задать вопрос
fenric
@fenric

PHP 5.5, состоит ли строка только из ASCII символов?

Покурив когда-то документацию, я написал незамысловатый метод:

/**
 * ASCII (American Standard Code for Information Interchange)
 *
 * @param   string  $str, [$...]
 *
 * @access  public
 * @return  bool
 */
public static function is_ascii()
{
	$str = implode(func_get_args());
	
	return (bool) preg_match('/^[[:ascii:]]+$/', $str);
}


Который отлично справлялся со своей прямой задачей, в PHP 5.5 этот метод стал работать через раз, метод с русскими буквами возвращает то TRUE то FALSE, кто нибудь сталкивался? Есть ли этому объяснение?

В кодировке cp866 русские буквы являются частью ASCII таблицы, быть может в этом причина? Это же какие ещё сюрпризы ожидать от PHP 5.5.

^[\x00-\x7F]+$ fixed...

PS сборка php под win.
  • Вопрос задан
  • 2721 просмотр
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 2
Для русских букв попробуйте добавить модификатор в регулярку, то есть
~^[[:ascii:]]+$~u
Также стоит обратить внимание на внутренние кодировки в настройках, например:
setlocale(LC_CTYPE, "en_US.UTF8");
setlocale(LC_TIME, "en_US.UTF8");
mb_internal_encoding('UTF-8');
mb_regex_encoding('UTF-8');
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы