regex - sencillas - expresión regular para el nombre y apellido
expresiones regulares java (17)
Para fines de validación del sitio web, necesito el nombre y la validación del apellido.
Para el primer nombre, solo debe contener letras y puede haber varias palabras con espacio y sin letras, y como mínimo 3 caracteres y en 30 caracteres superiores. La cadena vacía no debe ser validada. Es decir:
Jason, jason, jason smith, jason smith, jason, jason smith, jason smith, jason smith
Para el apellido, debe ser una sola palabra, solo letras y con al menos 3 caracteres y en la parte superior 30 caracteres. La cadena vacía no debe ser validada. IE: lazslo, Lazslo, LAZSLO
No te olvides de nombres como:
- Mathias d''Arras
- Martin Luther King hijo.
- Hector Sausage-Hausen
Esto debería ser el truco para la mayoría de las cosas:
/^[az ,.''-]+$/i
O admite nombres internacionales con súper dulce Unicode:
/^[a-zA-ZàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýżźñçčšžÀÁÂÄÃÅĄĆČĖĘÈÉÊËÌÍÎÏĮŁŃÒÓÔÖÕØÙÚÛÜŲŪŸÝŻŹÑßÇŒÆČŠŽ∂ð ,.''-]+$/u
Buen día a todos.
Creé una expresión regular personalizada para tratar los nombres:
He intentado con este tipo de nombres y he encontrado un trabajo perfecto
1) John Smith
2) John D''Largy
3) John Doe-Smith
4) John Doe Smith
5) Hector Sausage-Hausen
6) Mathias d''Arras
7) Martin Luther King
8) Ai Wong
9) Chao Chang
10) Alzbeta Bara
Mi RegEx se ve así:
^([a-zA-Z]{2,}/s[a-zA-z]{1,}''?-?[a-zA-Z]{2,}/s?([a-zA-Z]{1,})?)
Modelo MVC4:
[RegularExpression("^([a-zA-Z]{2,}//s[a-zA-z]{1,}''?-?[a-zA-Z]{2,}//s?([a-zA-Z]{1,})?)", ErrorMessage = "Valid Charactors include (A-Z) (a-z) ('' space -)") ]
Tenga en cuenta el doble / para los charactors de escape
Para aquellos de ustedes que son nuevos en RegEx, pensé que incluiría una explicación.
^ (comienzo de la línea)
[a-zA-Z] {2,} (excepto un nombre con al menos dos caracteres)
/ s (buscará un espacio en blanco entre nombre y apellido)
[a-zA-Z] {1,} (necesita al menos 1 Personaje)
''? -? (posibilidad de '' o - para apellidos de doble cañón y con guiones)
[a-zA-Z] {2,} (excepto un nombre con al menos dos caracteres)
/ s? (posibilidad de otro espacio en blanco)
([a-zA-Z] {1,})? * (posibilidad de un segundo apellido) <* br />
Espero que esto ayude en sus proyectos.
Saludos cordiales
Francois Muller
Como dijo maček:
No te olvides de nombres como:
Mathias d''Arras
Martin Luther King hijo.
Hector Sausage-Hausen
y para eliminar casos como:
..Mathias
Martin King, Jr.-
Esto cubrirá más casos:
^([a-z]+[,.]?[ ]?|[a-z]+[''-]?)+$
Después de revisar todas estas respuestas, encontré una manera de crear una pequeña expresión regular que sea compatible con la mayoría de los idiomas y solo permita caracteres de palabras. Incluso es compatible con algunos caracteres especiales como guiones, espacios y apóstrofes. He probado en python y admite los siguientes personajes:
^[/w''/-,.][^0-9_!¡?÷?¿///+=@#$%ˆ&*(){}|~<>;:[/]]{2,}$
Personajes compatibles:
abcdefghijklmnopqrstwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
áéíóúäëïöüÄ''
陳大文
łŁőŐűŰZàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųū
ÿýżźñçčšžÀÁÂÄÃÅĄĆČĖĘÈÉÊËÌÍÎÏĮŁ
ŃÒÓÔÖÕØÙÚÛÜŲŪŸÝŻŹÑßÇŒÆČŠŽ.-
ñÑâê都道府県Федерации
আবাসযোগ্য জমির걸쳐 있는
El primer nombre sería
"([a-zA-Z]{3,30}/s*)+"
Si necesitas que toda la parte del primer nombre sea más corta que 30 letras, debes verificar eso por separado, creo. La expresión ".{3,30}"
debería hacer eso.
Sus requisitos de apellido se traducirían en
"[a-zA-Z]{3,30}"
pero deberías verificar esto. Hay muchos apellidos que contienen espacios.
Entonces, con el cliente, creamos esta expresión regenta loca:
(^$)|(^([^/-!#/$%&/(/)/*,/./:;/?@/[///]_/{/|/}¨ˇ“”€/+<=>§°/d/s¤®™©]| )+$)
Esto es lo que uso Esta expresión regular solo acepta nombres con caracteres mínimos, desde AZ az ,space and -
.
Ejemplo de nombres: Ionut Ionete, Ionut-Ionete Cantemir, Ionete Ionut-Cantemirm Ionut-Cantemir Ionete-Second
El límite del carácter del nombre es 3, si quieres cambiar esto, modifica {3,} a {6,}
([a-zA-Z/-]+){3,}/s+([a-zA-Z/-]+){3,}
Estoy trabajando en la aplicación que valida los pasaportes internacionales (ICAO). Solo admitimos caracteres ingleses. Mientras que la mayoría de los personajes nacionales extranjeros pueden ser representados por un personaje en el alfabeto latino, por ejemplo, è por e, hay varios caracteres nacionales que requieren una letra extra para representarlos, como la diéresis alemana que requiere que se agregue una ''e'' a la letra por ejemplo, ä por ae.
Esta es la Regex de JavaScript para los nombres y apellidos que usamos:
/^[a-zA-Z ''.-]*$/
El número máximo de caracteres en el pasaporte internacional es hasta 31 . Usamos maxlength = "31" para mejorar los mensajes de error de palabras en lugar de incluirlo en la expresión regular.
Aquí hay un fragmento de nuestro código en AngularJS 1.6 con manejo de formularios y errores:
class PassportController {
constructor() {
this.details = {};
// English letters, spaces and the following symbols '' - . are allowed
// Max length determined by ng-maxlength for better error messaging
this.nameRegex = /^[a-zA-Z ''.-]*$/;
}
}
angular.module(''akyc'', [''ngMessages''])
.controller(''PassportController'', PassportController);
.has-error p[ng-message] {
color: #bc111e;
}
.tip {
color: #535f67;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.6/angular.min.js"></script>
<script src="https://code.angularjs.org/1.6.6/angular-messages.min.js"></script>
<main ng-app="akyc" ng-controller="PassportController as $ctrl">
<form name="$ctrl.form">
<div name="lastName" ng-class="{ ''has-error'': $ctrl.form.lastName.$invalid} ">
<label for="pp-last-name">Surname</label>
<div class="tip">Exactly as it appears on your passport</div>
<div ng-messages="$ctrl.form.lastName.$error" ng-if="$ctrl.form.$submitted" id="last-name-error">
<p ng-message="required">Please enter your last name</p>
<p ng-message="maxlength">This field can be at most 31 characters long</p>
<p ng-message="pattern">Only English letters, spaces and the following symbols '' - . are allowed</p>
</div>
<input type="text" id="pp-last-name" ng-model="$ctrl.details.lastName" name="lastName"
class="form-control" required ng-pattern="$ctrl.nameRegex" ng-maxlength="31" aria-describedby="last-name-error" />
</div>
<button type="submit" class="btn btn-primary">Test</button>
</form>
</main>
He buscado y buscado, jugado y jugado con él, y aunque no es perfecto, puede ayudar a otros a intentar validar los nombres y apellidos que se proporcionaron como una sola variable.
En mi caso, esa variable es $ nombre.
Usé el siguiente código para mi PHP:
if (preg_match(''//b([A-Z]{1}[a-z]{1,30}[- ]{0,1}|[A-Z]{1}[- /']{1}[A-Z]{0,1}
[a-z]{1,30}[- ]{0,1}|[a-z]{1,2}[ -/']{1}[A-Z]{1}[a-z]{1,30}){2,5}/'', $name)
# there is no space line break between in the above "if statement", any that
# you notice or perceive are only there for formatting purposes.
#
# pass - successful match - do something
} else {
# fail - unsuccessful match - do something
Estoy aprendiendo RegEx yo mismo, pero tengo la explicación para el código proporcionado por RegEx Buddy.
Aquí está:
Posición de confirmación en un límite de palabra «/ b»
Coincide con la expresión regular a continuación y captura su coincidencia con el número de referencia 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, devolviéndola según sea necesario (codicioso) «{2,5}»
* NECESITO ALGUNA 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}»
Haga coincidir la expresión regular a continuación (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 veces «{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, devolviéndola según sea necesario (codicioso) «{1,30}»
Coincidir con un solo personaje presente en la lista "-" «[-] {0,1}»
Entre cero y una veces, tantas veces como sea posible, devolviéndola según sea necesario (codicioso) «{0,1}»
O haga coincidir la expresión regular número 2 a continuación (intentando la siguiente alternativa solo si esta 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 veces «{1}»
Haga coincidir un solo carácter presente en la lista siguiente «[- / ''] {1}»
Exactamente 1 veces «{1}»
Uno de los caracteres "-" «-» A ''personaje «/'»
Coincide con un solo carácter en el rango entre "A" y "Z" «[AZ] {0,1}»
Entre cero y una veces, tantas veces como sea posible, devolviéndola 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, devolviéndola según sea necesario (codicioso) «{1,30}»
Coincidir con un solo personaje presente en la lista "-" «[-] {0,1}»
Entre cero y una veces, tantas veces como sea posible, devolviéndola 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 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 dos veces, tantas veces como sea posible, devolviéndola según sea necesario (codicioso) «{1,2}»
Coincide con un solo carácter en el rango entre "" y "''" «[- /'] {1}»
Exactamente 1 veces «{1}»
Coincide con un solo carácter en el rango entre "A" y "Z" «[AZ] {1}»
Exactamente 1 veces «{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, devolviéndola según sea necesario (codicioso) «{1,30}»
Sé que esta validación supone por completo que cada persona que completa el formulario tiene un nombre occidental y eso puede eliminar a la gran mayoría de las personas en el mundo. Sin embargo, siento que este es un paso en la dirección correcta. Tal vez esta expresión regular es demasiado básica para que los gurús la aborden de manera simplista o tal vez haya alguna otra razón por la que no pude encontrar el código anterior en mis búsquedas. Pasé demasiado tiempo tratando de descifrar este punto, probablemente te darás cuenta de lo borrascoso que estoy pensando 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.
- STEVE SMITH (falla)
- Stev3 Smith (falla)
- STeve Smith (falla)
- Steve SMith (falla)
- Steve Sm1th (transmitido por Steve Sm)
- d''Are to Beaware (aprobado en Are to Beaware)
- Jo Blow (aprobado)
- Hyoung Kyoung Wu (aprobado)
- Mike O''Neal (aprobado)
- Steve Johnson-Smith (aprobado)
- Jozef-Schmozev Hiemdel (aprobado)
- O Henry Smith (aprobado)
- Mathais d''Arras (aprobado)
- Martin Luther King Jr (aprobado)
- Downtown-James Brown (aprobado)
- Darren McCarty (aprobado)
- George De FunkMaster (aprobado)
- Baloncesto Kurtis B-Ball (aprobado)
- Ahmad el Jeffe (aprobado)
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 la prueba, este código podría ser para usted.
Si tiene alguna mejora, hágamelo saber. Estoy recién en las primeras etapas (primeros meses de averiguar RegEx).
Gracias y buena suerte, Steve
Para los nombres y apellidos, en realidad solo hay dos cosas que debería estar buscando:
- Longitud
- Contenido
Aquí está mi expresión regular:
var regex = /^[A-Za-z-,]{3,20}?=.*/d)/
1. Longitud
Aquí el {3,20} limita la longitud de la cadena entre 3 y 20 caracteres.
2. Contenido
La información entre corchetes [A-Za-z] permite mayúsculas y minúsculas. Todos los símbolos posteriores (- ,.) también están permitidos.
Para simplificar, puedes usar:
(.*)/s(.*)
Lo que me gusta de esto es que el apellido siempre está después del primer nombre, así que si vas 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.
Si desea que el nombre completo tenga entre 3 y 30 caracteres sin restricciones en palabras individuales, intente esto:
[a-zA-Z ]{3,30}
Tenga en cuenta que excluye todas las letras extranjeras como é, è, à, ï.
Si desea que el límite de 3 a 30 caracteres se aplique a cada palabra individual, Jens Regexp hará el trabajo.
Una función simple usando preg_match en php
<?php
function name_validation($name) {
if (!preg_match("/^[a-zA-Z ]*$/", $name) === false) {
echo "$name is a valid name";
} else {
echo "$name is not a valid name";
}
}
//Test
name_validation(''89name'');
?>
Usted hace suposiciones falsas sobre el formato de nombre y apellido. Probablemente sea mejor no validar el nombre en absoluto, además de verificar que esté vacío.
Yo suelo:
/^(?:[/u00c0-/u01ffa-zA-Z''-]){2,}(?:/s[/u00c0-/u01ffa-zA-Z''-]{2,})+$/i
Y prueba para maxlength usando otros medios
^/p{L}{2,}$
^ 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, devolviéndolo 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 u otros caracteres.
var name = document.getElementById(''login_name'').value;
if ( name.length < 4 && name.length > 30 )
{
alert ( ''Name length is mismatch '' ) ;
}
var pattern = new RegExp("^[a-z/.0-9 ]+$");
var return_value = var pattern.exec(name);
if ( return_value == null )
{
alert ( "Please give valid Name");
return false;
}