私の目的
「著者名の入力」は、スペースと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 はまだ質問として存在します。