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.
  • Вопрос задан
  • 2701 просмотр
Пригласить эксперта
Ответы на вопрос 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');
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы