我的目标
对于“作者姓名输入”,确保只输入空格和 utf-8 字母。我的网站语言是土耳其语,土耳其语字母表有非英语字符。
我奇怪的问题
此正则表达式适用于 rubular.com
如果输入字符串:“Selim Çınar”结果:匹配
如果输入字符串:“Selim Çınar 12”结果:不匹配
正则表达式:/^[\p{L} ]+$/u
然后我在我的网站上创建了 trial.php 并在下面运行代码
1
echo '<br /><br /><br />';
$str ='Selim Cinar';
if (!preg_match("/^[\p{L} ]+$/u", $str))
{echo 'no, not only utf-8 letters and spaces';}
else {$str.' yes utf-8 letters and spaces';}
echo '<br /><br /><br />';
上面代码的结果<br />
:在源页面只有标签的空页面
2
echo '<br /><br /><br />';
$str ='Selim Çınar'; //includes Tr characters
if (!preg_match("/^[\p{L} ]+$/u", $str))
{echo 'no, not only utf-8 letters and spaces';}
else {$str.' yes utf-8 letters and spaces';}
echo '<br /><br /><br />';
上面代码的结果<br />
:在源页面只有标签的空页面
3
代码来源: http: //php.net/manual/en/function.ctype-alpha.php
$str ='Selim Çınar'; //includes Tr characters
$str =trim($str);
$str = str_replace(' ', '', $str);
setLocale(LC_CTYPE, 'TR_tr.UTF-8');
if (ctype_alpha($str)) {echo 'yes utf-8 letters';}
else {echo 'no, not only utf-8 letters';}
上面代码的结果:不,不仅是 utf-8 字母
4
代码来源: http: //php.net/manual/en/function.ctype-alpha.php
$str ='Selim Cinar';
$str =trim($str);
$str = str_replace(' ', '', $str);
setLocale(LC_CTYPE, 'TR_tr.UTF-8');
if (ctype_alpha($str)) {echo 'yes utf-8 letters';}
else {echo 'no, not only utf-8 letters';}
上面代码的结果:是 utf-8 字母
我的phpinfo
PHP 版本 5.4.10
Apache 2.0 处理
程序 Apache API 版本:20051115
PCRE(Perl 兼容正则表达式)支持启用
PCRE 库版本 8.20 2011-10-21
关于 trial.php
trial.php 是纯 php。没有 html 标头声明。
我的问题
- 为什么我的案例 1 和案例 2 {! 更新:由 MikeM 解决 }
- 为什么案例 3 不将“SelimÇınar”理解为 utf-8?我的代码是假的吗(
setLocale
部分可能)?
更新
问题 1 由 MikeM 解决。
**问题 2 仍然作为问题存在。