Colección de citas famosas - Slogan de motivación - Cómo limitar la longitud de los caracteres y los emoticonos del cuadro de entrada de iOS

Cómo limitar la longitud de los caracteres y los emoticonos del cuadro de entrada de iOS

A menudo nos encontramos con tales demandas, como que el cuadro de entrada del teléfono móvil está limitado a 11 dígitos, el perfil personal está limitado a 100 palabras en inglés y 50 palabras en chino, y no se pueden usar expresiones emoji en apodos personales.

Basándonos en la comprensión de la codificación del artículo anterior, echemos un vistazo a cómo resolver estas necesidades.

Podemos saber que las expresiones emoji son en realidad cadenas compuestas por uno o más puntos de código Unicode, y las expresiones emoji corresponden a este rango determinado de símbolos.

Entonces, si desea determinar si una cadena contiene expresiones emoji, se deben resolver dos problemas:

En iOS, se puede acceder a NSString a través de enumeratesubstringsinrange: opciones: usando bloque: método . Este método oculta la ubicación de la abstracción Unicode, lo que le facilita recorrer cadenas, palabras, líneas, oraciones y párrafos combinados dentro de una cadena.

Incluso puedes agregar la opción NSStringEnumerationLocalized para que la configuración regional del usuario se tenga en cuenta al determinar los límites entre palabras y oraciones. Para iterar sobre caracteres individuales, puede especificar el parámetro como NSStringEnumeration a través de ComposedCreaterQueries e iterar sobre las subcadenas relacionadas en el orden de los caracteres.

Esto sugiere que Apple quiere que tratemos las cadenas como colecciones de subcadenas porque:

1. Un solo carácter Unicode es demasiado pequeño para representar un carácter Unicode verdadero.

2. Algunos caracteres se componen de múltiples puntos de código Unicode.

Las expresiones emoji corresponden a un cierto rango de símbolos, por lo que podemos determinar si el carácter modificado es un código emoji juzgando la codificación Unicode del carácter.

Pero aquí hay un problema, es decir, el rango de símbolos correspondientes a los emoji cambiará con la versión del sistema, porque se pueden agregar nuevas expresiones emoji con cada actualización de la versión, por lo que este método de juicio debe ser actualizado todo el tiempo. ¿Existe una buena manera de emitir juicios eficaces y a largo plazo?

En nuestra impresión a largo plazo, las expresiones emoji están coloreadas. A partir de ahora, las expresiones emoji que vienen con el teclado de Apple siempre serán en color, mientras que el texto normal generalmente es negro, así que aquí está la solución:

La implementación específica es la siguiente:

Por supuesto, este método solo se aplica a una pequeña cantidad de cadenas, porque si la cadena es muy larga, usar este método para analizar y juzgar consumirá recursos de la CPU.

Entonces podemos combinar el rango de símbolos correspondiente al emoji de arriba y si el color de abajo está incluido para determinar si la cadena correspondiente contiene expresiones emoji, por lo que la precisión será mayor, pero algunas expresiones en algún tercero teclados de fiesta, por ejemplo, el método de entrada Sogou todavía no se filtra bien.

Si es un lenguaje swift, porque Swift 5.0 tiene un nuevo Unicode. Clase Scalar.Properties, podemos usar los métodos de esta clase para agregar algunas propiedades auxiliares a las clases Character y String. Habrá:

Del mismo modo, este método en Swift no puede ser 100% preciso para algunos juicios de expresión en teclados de terceros.

Por ejemplo, en los perfiles personales, los emoticones suelen estar prohibidos, pero se permiten el chino y el inglés. Si el chino tiene 2 caracteres y el inglés 1 carácter, ¿cómo calcular con precisión la longitud de la cadena?

Debido a que aquí los caracteres chinos cuentan como 2 bytes y los caracteres ingleses como 1 byte, se utiliza la codificación GB_18030_2000 para calcular la longitud de la cadena.

GB_18030_2000 tiene las siguientes características:

Código GB_18030_2000:

Hay 3500 caracteres chinos de uso común, todos incluidos en la parte de doble byte, así que use GB_18030_2000 para calcular la cuerda La longitud se adapta perfectamente a nuestras necesidades.

Basado en el conocimiento anterior, escribí un interceptor de cuadro de entrada FJFTextInputIntercepter, que puede limitar la entrada del cuadro de entrada configurando los parámetros correspondientes:

Aquí, lo escribí en dos maneras Consulte este interceptor:

Unicode y JavaScript en detalle

Desde las limitaciones de emoji hasta la codificación Unicode