【发布时间】:2014-03-11 09:29:06
【问题描述】:
这是一个简短的函数,旨在针对仅匹配 ascii 字符的正则表达式测试字符串:
<?php
$test = 'æhrzBGFX029!^%/\#,.';
if (preg_match('/^[[:ascii:]]*$/u', $test)) {
echo 'ERR: this shouldn\'t have matched: \'' . $test . '\'';
} else {
echo 'OK';
}
在 Ubuntu 上,这会正确通过(OK 被打印出来)。但是在 Mac OS X (Mavericks) 上,这会返回错误响应(ERR:这不应该匹配)。
我不明白这是为什么。有什么想法吗?
编辑:OS X 区域设置是:
LANG="en_US"
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL="en_US.UTF-8"
正确通过的 Ubuntu 机器上的语言设置(返回 OK)是:
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
【问题讨论】:
-
我已经在 Mavericks 的 PHP 版本 5.3.28 和 5.4.25 上测试过,效果很好
-
你用的是什么版本的PHP?
-
您的 Ubuntu 和 OSX 安装是否可能使用不同的语言环境?如果是这样,当您更改其中一个并重试时会发生什么?
-
我使用的是 PHP 5.5.5。将尝试更改语言环境,看看会发生什么。
-
是的,字符串包含非 ascii 字符,因此脚本应始终输出“OK”(表示不匹配)。但是,我对 Mavericks 和 php 5.4 和 5.5 有相同的体验(模式匹配)。在 OSX 上运行 php > 5.3 可能是个问题,但我不明白为什么。
标签: php regex macos ubuntu ascii