2

full_nameフィールドに使用する必要があるpregmachルールは何ですか?
ユーザーがHTMLまたはPHPコード値ではなく文字のみを入力し、3〜11文字のスペース
を使用できるようにしたい:

<?php
if (preg_match("%^[A-Za-z0-9-_]{3,10}$%", $_REQUEST['usr'])) {
//do something like 
mysql_query('insert into user(name) values(this field)');
//damn what is this for: It does not meet our quality standards.!!!
//i must insert more code? i dont have ! let me go !
}
else{
//do something else!
die('get out !:D');
}
?>

しかし、このユーザーでは「مسیحارسطوئی」のようなUTF-8文字を入力でき
ないので、UTF-8にどのpreg_matchルールを使用する必要がありますか?
または、preg_matchのような他のどのコードを使用できますか?
<> {} []または$%^&*以外の文字を3〜10文字挿入できます
!!! ありがとう

4

3 に答える 3

2

u次のような修飾子を使用します。

preg_match('/pattern_with_unicode_symbols/u');

この修飾子は、Perlと互換性のないPCREの追加機能をオンにします。パターン文字列はUTF-8として扱われます。

「\x{2460}」構文を使用してutf-8文字を定義します

于 2013-01-24T23:16:09.960 に答える
2

これにより「0」が返されます。cosمسیح ارسطوئیには3〜10文字しか含まれていません。

$x = preg_match('~^([\pL]{3,10})$~u', 'مسیح ارسطوئی');
echo $x ? 1 : 0;

しかし、これはあなたの場合に結果をもたらします。

preg_match('~([\pL]+)~u', 'مسیح ارسطوئی', $m);
print_r($m);

Array
(
    [0] => مسیح
    [1] => مسیح
)

詳細はこちらをご覧ください:PHP:Unicode文字プロパティ

于 2013-01-24T23:24:43.870 に答える
1
preg_match_all('/#(\pL*)/u', 'this is #مثال text', $matches);
print_r($matches);

'u'、'\ pL':文字列はUTF-8として扱われます。

于 2014-03-30T09:04:33.700 に答える