Para fines de validación del sitio web, necesito la validación del nombre y apellido.
Para el nombre, solo debe contener letras, puede tener varias palabras con espacios y tener un mínimo de tres caracteres, pero un máximo de 30 caracteres superiores. Una cadena vacía no debe validarse (por ejemplo , Jason , jason , jason smith , jason smith , JASON , Jason smith , jason Smith y jason SMITH ).
Para el apellido, debe ser una sola palabra, solo letras, con al menos tres caracteres, pero como máximo 30 caracteres. Las cadenas vacías no deben validarse (por ejemplo , lazslo , Lazslo y LAZSLO ).
regex
validation
Hellnar
fuente
fuente
Respuestas:
No te olvides de nombres como:
Esto debería funcionar para la mayoría de las cosas:
/^[a-z ,.'-]+$/i
O admite nombres internacionales con unicode súper dulce:
/^[a-zA-ZàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýżźñçčšžÀÁÂÄÃÅĄĆČĖĘÈÉÊËÌÍÎÏĮŁŃÒÓÔÖÕØÙÚÛÜŲŪŸÝŻŹÑßÇŒÆČŠŽ∂ð ,.'-]+$/u
fuente
.
(punto decimal / punto / punto) ya que es el comodín deőŐűŰ
, faltan caracteres húngaros , caracteres polacosłŁ
también, sin mencionar varios caracteres lituanos y letones. Más bien, intente encontrar una biblioteca que transforme los personajes exóticos en la versión adecuada sin acento, luego escriba la/^[a-z ,.'-]+$/i
expresión regular.陳大文
no es un nombre válido aquí?/^[\p{L}'][ \p{L}'-]*[\p{L}]$/u
, aunque sea bastante indulgente.Hace suposiciones falsas sobre el formato del nombre y apellido. Probablemente sea mejor no validar el nombre en absoluto, además de verificar que esté vacío.
fuente
Después de revisar todas estas respuestas, encontré una manera de crear una pequeña expresión regular que admita la mayoría de los idiomas y solo permita caracteres de palabras. Incluso admite algunos caracteres especiales como guiones, espacios y apóstrofos. He probado en Python y admite los siguientes caracteres:
Caracteres admitidos:
fuente
^[\w'\-,.]*[^_!¡?÷?¿\/\\+=@#$%ˆ&*(){}|~<>;:[\]]*$
^[^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]]{2,}$
He creado una expresión regular personalizada para tratar con nombres:
Probé este tipo de nombres y encontré que funcionan perfectamente
Mi expresión regular se ve así:
Modelo MVC4:
Tenga en cuenta el doble
\\
para los caracteres de escapePara aquellos de ustedes que son nuevos en RegEx, pensé en incluir una explicación.
fuente
He buscado y buscado y jugado y jugado con él y, aunque no es perfecto, puede ayudar a otros a intentar validar los nombres y apellidos que se han proporcionado como una variable.
En mi caso, esa variable es $ name.
Usé el siguiente código para mi PHP:
Estoy aprendiendo RegEx yo mismo, pero tengo la explicación del código proporcionada por RegEx buddy.
Aquí está:
Afirmar la posición en el límite de una palabra «\ b»
Haga coincidir la expresión regular a continuación y capture su coincidencia en el número de referencia inversa 1
«([AZ] {1} [az] {1,30} [-] {0,1} | [AZ] {1} [- \ '] { 1} [AZ] {0,1} [az] {1,30} [-] {0,1} | [az] {1,2} [- \ '] {1} [AZ] {1} [ az] {1,30}) {2,5} »
Entre 2 y 5 veces, tantas veces como sea posible, devolviendo según sea necesario (codicioso) «{2,5}»
* NECESITO AYUDA AQUÍ PARA ENTENDER LAS RAMIFICACIONES DE ESTA NOTA *
Nota: repetí el grupo de captura en sí. El grupo capturará solo la última iteración. Coloque un grupo de captura alrededor del grupo repetido para capturar todas las iteraciones. «{2,5}»
Coincide con la expresión regular de abajo (intentando la siguiente alternativa solo si esta falla) «[AZ] {1} [az] {1,30} [-] {0,1}»
Coincide con un solo carácter en el rango entre "A" y "Z" «[AZ] {1}»
Exactamente 1 vez «{1}»
Coincide con un solo carácter en el rango entre "a" y "z" «[az] {1,30}»
Entre una y 30 veces, tantas veces como sea posible, devolviendo según sea necesario (codicioso) «{1,30}»
Coincide con un solo carácter presente en la lista “-” «[-] {0,1}»
Entre cero y una, tantas veces como sea posible, devolviendo según sea necesario (codicioso) «{0,1}»
O haga coincidir la expresión regular número 2 a continuación (intente la siguiente alternativa solo si ésta falla) «[AZ] {1} [- \ '] {1} [AZ] {0,1} [az] {1,30} [ -] {0,1} »
Coincide con un solo carácter en el rango entre "A" y "Z" «[AZ] {1}»
Exactamente 1 vez «{1}»
Coincide con un solo carácter presente en la lista a continuación «[- \ '] {1}»
Exactamente 1 vez «{1}»
Uno de los caracteres “-” «-» Un 'carácter «\'»
Coincide con un solo carácter en el rango entre "A" y "Z" «[AZ] {0,1}»
Entre cero y una, tantas veces como sea posible, devolviendo según sea necesario (codicioso) «{0,1}»
Coincide con un solo carácter en el rango entre "a" y "z" «[az] {1,30}»
Entre una y 30 veces, tantas veces como sea posible, devolviendo según sea necesario (codicioso) «{1,30}»
Coincide con un solo carácter presente en la lista “-” «[-] {0,1}»
Entre cero y una, tantas veces como sea posible, devolviendo según sea necesario (codicioso) «{0,1}»
O haga coincidir la expresión regular número 3 a continuación (todo el grupo falla si esta no coincide) «[az] {1,2} [- \ '] {1} [AZ] {1} [az] {1,30} »
Coincide con un solo carácter en el rango entre "a" y "z" «[az] {1,2}»
Entre una y 2 veces, tantas veces como sea posible, devolviendo según sea necesario (codicioso) «{1,2}»
Coincide con un solo carácter en el rango entre “” y “'” «[- \'] {1}»
Exactamente 1 vez «{1}»
Coincide con un solo carácter en el rango entre "A" y "Z" «[AZ] {1}»
Exactamente 1 vez «{1}»
Coincide con un solo carácter en el rango entre "a" y "z" «[az] {1,30}»
Entre una y 30 veces, tantas veces como sea posible, devolviendo según sea necesario (codicioso) «{1,30}»
Sé que esta validación asume totalmente que cada persona que completa el formulario tiene un nombre occidental y eso puede eliminar a la gran mayoría de personas en el mundo. Sin embargo, siento que este es un paso en la dirección correcta. Quizás esta expresión regular sea demasiado básica para que los gurús la aborden de manera simplista o quizás haya alguna otra razón por la que no pude encontrar el código anterior en mis búsquedas. Pasé demasiado tiempo tratando de resolver esto, probablemente notarás cuán confusa está mi mente sobre todo esto si miras los nombres de mis pruebas a continuación.
Probé el código en los siguientes nombres y los resultados están entre paréntesis a la derecha de cada nombre.
Si tiene nombres básicos, debe haber más de uno hasta cinco para que funcione el código anterior, que son similares a los que usé durante las pruebas, este código podría ser para usted.
Si tiene alguna mejora, hágamelo saber. Solo estoy en las primeras etapas (los primeros meses de descubrir RegEx.
Gracias y buena suerte, Steve.
fuente
El primer nombre sería
Si necesita que toda la parte del nombre tenga menos de 30 letras, creo que debe verificarlo por separado. La expresión
".{3,30}"
debería hacer eso.Los requisitos de su apellido se traducirían en
pero deberías comprobarlos. Hay muchos apellidos que contienen espacios.
fuente
Como dijo maček:
No te olvides de nombres como:
y para eliminar casos como:
Esto cubrirá más casos:
fuente
Estoy trabajando en la aplicación que valida los pasaportes internacionales (OACI). Solo admitimos caracteres en inglés. Si bien la mayoría de los caracteres nacionales extranjeros pueden estar representados por un carácter en el alfabeto latino, por ejemplo, è por e, hay varios caracteres nacionales que requieren una letra adicional para representarlos, como la diéresis alemana, que requiere que se agregue una 'e' a la letra. por ejemplo, ä por ae.
Este es el JavaScript Regex para el nombre y apellido que usamos:
El número máximo de caracteres en el pasaporte internacional es de 31 . Usamos maxlength = "31" para mejorar los mensajes de error de palabras en lugar de incluirlos en la expresión regular.
Aquí hay un fragmento de nuestro código en AngularJS 1.6 con manejo de formularios y errores:
fuente
Yo suelo:
Y pruebe la longitud máxima utilizando otros medios
fuente
Esta expresión regular funciona para mí (estaba usando en Angular 8):
No será válido si hay: -
Ejemplo de nombre no válido (espacios en blanco)
Ejemplo de nombre válido:
fuente
En aras de la simplicidad, puede utilizar:
Lo que me gusta de esto es que el apellido siempre está después del nombre, por lo que si va a ingresar estos grupos coincidentes en una base de datos y el nombre es John M. Smith, el primer grupo será John M. , y el segundo grupo será Smith.
fuente
^ afirma la posición al comienzo de una línea.
\ p {L} coincide con cualquier tipo de letra de cualquier idioma
{2,} Cuantificador: coincide entre 2 y un número ilimitado de veces, tantas veces como sea posible, devolviendo según sea necesario (codicioso)
$ afirma la posición al final de una línea
Por lo tanto, debe ser un nombre en cualquier idioma que contenga al menos 2 letras (o símbolos) sin números ni otros caracteres.
fuente
Entonces, con el cliente creamos esta expresión regular loca:
fuente
Para nombres y apellidos, en realidad solo hay 2 cosas que debe buscar:
Aquí está mi expresión regular:
var regex = /^[A-Za-z-,]{3,20}?=.*\d)/
1. Longitud
Aquí el {3,20} restringe la longitud de la cadena entre 3 y 20 caracteres.
2. Contenido
La información entre corchetes [A-Za-z] permite caracteres en mayúsculas y minúsculas. También se permiten todos los símbolos posteriores (- ,.).
fuente
Esto es lo que utilizo.
Esta expresión regular solo acepta nombres con caracteres mínimos, desde
A-Z a-z ,space and -
.Ejemplo de nombres:
El límite de caracteres del nombre es 3. Si desea cambiar esto, modifique {3,} a {6,}
fuente
La siguiente expresión funcionará en cualquier idioma compatible con UTF-16 y garantizará que haya un mínimo de dos componentes en el nombre (es decir, primero + apellido), pero también permitirá cualquier número de segundos nombres.
En el momento de escribir este artículo, parece que ninguna de las otras respuestas cumple con todos esos criterios. Incluso
^\p{L}{2,}$
, que es el más cercano, se queda corto porque también coincidirá con caracteres "invisibles", comoU+FEFF
(Espacio sin interrupciones de ancho cero).fuente
Pruebe estas soluciones, para obtener la máxima compatibilidad, como ya he publicado aquí :
JavaScript:
var nm_re = /^(?:((([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-.\s])){1,}(['’,\-\.]){0,1}){2,}(([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-. ]))*(([ ]+){0,1}(((([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-\.\s])){1,})(['’\-,\.]){0,1}){2,}((([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-\.\s])){2,})?)*)$/;
HTML5:
<input type="text" name="full_name" id="full_name" pattern="^(?:((([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-.\s])){1,}(['’,\-\.]){0,1}){2,}(([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-. ]))*(([ ]+){0,1}(((([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-\.\s])){1,})(['’\-,\.]){0,1}){2,}((([^0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]'’,\-\.\s])){2,})?)*)$" required>
fuente
Esto parece hacer el trabajo por mí:
fuente
Una función simple usando preg_match en php
fuente
Nombre completo con un solo espacio en blanco:
fuente
Si desea que el nombre completo tenga entre 3 y 30 caracteres sin restricciones en palabras individuales, intente esto:
Tenga en cuenta que excluye todas las letras extranjeras como é, è, à, ï.
Si desea que se aplique el límite de 3 a 30 caracteres a cada palabra individual, Jens regexp hará el trabajo.
fuente
fuente