Un método sencillo y maravilloso para obtener la longitud de una cuerda china.

Un método sencillo y maravilloso para obtener la longitud de una cuerda china.

Al escribir la clase de validación de formulario del marco esta noche, es necesario juzgar si la longitud de una determinada cadena está dentro del rango especificado. Naturalmente, pensé en la función strlen en PHP.

$str = 'Hello world!';
echo strlen($str);      // 输出12

Sin embargo, en las funciones integradas de PHP, tanto strlen como mb_strlen calculan la longitud calculando el número de bytes ocupados por la cadena. En diferentes situaciones de codificación, el número de bytes ocupados por el chino es diferente. En GBK/GB2312, los caracteres chinos ocupan 2 bytes, mientras que en UTF-8, los caracteres chinos ocupan 3 bytes.

$str = '你好,世界!';
echo strlen($str);      // GBK或GB2312下输出12,UTF-8下输出18

Cuando juzgamos la longitud de una cadena, a menudo necesitamos juzgar la cantidad de caracteres, no la cantidad de bytes ocupados por la cadena, como este código PHP en UTF-8:

$name = '张耕畅';
$len = strlen($name);
// 输出 FALSE,因为在UTF-8下三个中文占9个字节
if($len >= 3 && $len <= 8){
    
    
  echo 'TRUE';
}else{
    
    
  echo 'FALSE';
}

Entonces, ¿existe alguna forma conveniente y práctica de obtener la longitud de una cadena de caracteres chinos? La cantidad de caracteres chinos se puede calcular mediante regularización, dividir por 2 bajo la codificación GBK / GB2312 y dividir por 3 bajo la codificación UTF-8, y finalmente agregar la longitud de la cadena de caracteres no chinos, pero esto es demasiado. Problema, WordPress Hay un fragmento de código más hermoso, como el siguiente:

$str = 'Hello,世界!';
preg_match_all('/./us', $str, $match);
echo count($match[0]);  // 输出9

La idea es usar expresiones regulares para dividir la cadena en caracteres individuales y usar directamente el recuento para calcular el número de caracteres coincidentes , que es el resultado que queremos.

Supongo que te gusta

Origin blog.csdn.net/heshihu2019/article/details/132142277
Recomendado
Clasificación