strlen($username);
用户名可以带有ASCII,Unicode或两者。
示例: 的
Jam123(ASCII) - 6个字符
ابت(Unicode) - 3个字符,但是strlen返回6个字节,因为unicode是每个字符2个字节。
Jamت(Unicode和ASCII) - 5个字符(3个ASCII和2个Unicode,即使我只有一个unicode字符)
所有情况下的用户名不得超过25个字符,且不得少于4个字符。
我的主要问题是当将Unicode和ASCII混合在一起时,如何跟踪计数,以便条件语句可以判断用户名是否不超过25且不低于4.
if(strlen($username) <= 25 && !(strlen($username) < 4))
unicode中的3个字符将被计为6个字节,这会导致麻烦,因为它允许用户在字符数最小为4时拥有3个unicode字符的用户名。
数字将始终为ASCII
答案 0 :(得分:4)
答案 1 :(得分:0)
您可以在选择编码的地方使用mb_strlen。
http://sandbox.phpcode.eu/g/3a144/1
<?php
echo mb_strlen('ابت', 'UTF8'); // returns 3
答案 2 :(得分:0)
计算UNICODE句子/字符串中的单词的函数:
function mb_count_words($string)
{
preg_match_all('/[\pL\pN\pPd]+/u', $string, $matches); return count($matches[0]);
}
或
function mb_count_words($string, $format = 0, $charlist = '[]') {
$string=trim($string);
if(empty($string))
$words = array();
else
$words = preg_split('~[^\p{L}\p{N}\']+~u',$string);
switch ($format) {
case 0:
return count($words);
break;
case 1:
case 2:
return $words;
break;
default:
return $words;
break;
}
}
然后做:
echo mb_count_words("chào buổi sáng");