¡por favor ayuda! He estado en esto durante horas.
Necesito una expresión regular de nombre que acepte letras y los siguientes caracteres especiales.
- , ' , . y espacios en blanco
Sin embargo, NO debe permitir que el nombre se componga solo de caracteres especiales o espacios en blanco.
Entonces, en esencia, debe tener al menos 1 letra o comenzar con una letra.
Lo que tengo es esto;
/^[a-zA-Z](|\s|.|'|-]*$)/iSin embargo, está permitiendo caracteres especiales. Si alguien pudiera ayudar!
/^(?=.*[az])[az\s.'-]+$/i (?=.*[az]) Requiere al menos una letra ASCII. (previsión positiva)
Puede usar + (coincidir con 1 o más) o * (coincidir con 0 o más).
Nota: debido a la bandera i , no necesita A-Za-z . Es insensible a mayúsculas y minúsculas. Entonces solo uno de ellos es necesario. Usar ambos con i-flag es redundante.
Curiosidades: Escapar . en el conjunto de caracteres [...] no es obligatorio pero opcional posible ( \. ).
const regex = /^(?=.*[az])[az\s.'-]+$/i; console.log(regex.test('Hello World'), 'should be true'); console.log(regex.test('Hello.World'), 'should be true'); console.log(regex.test('Hello-World'), 'should be true'); console.log(regex.test(`'Hello- World.'`), 'should be true'); console.log(regex.test('Hello $ World'), 'should be false'); console.log(regex.test('Hello@World'), 'should be false'); // Min. one AZ char required. console.log(regex.test(`'.- `), 'should be false');También puede probar su expresión regular en línea, por ejemplo , regexr o regex101 .
Una cadena formada por todos - , ' , . , espacios en blanco y letras es
^[-'.\sa-zA-Z]+$Una cadena que tiene al menos una letra tiene un número ilimitado de las anteriores intercalando una sola letra:
^[-'.\sa-zA-Z]*[a-zA-Z][-'.\sa-zA-Z]*$ Puedes denotar las letras como quieras. a-zA-Z puede ser solo un marcador de posición.
En lugar de usar una sola expresión regular, también puede optar por usar varias. En tu escenario esto sería 2:
function validateName(name) { const whitelist = /^[-'.\sa-z]*$/i; const letter = /[az]/i; return whitelist.test(name) && letter.test(name); } console.log("John Doe", "//=>", validateName("John Doe")); console.log("John F. Kennedy", "//=>", validateName("John F. Kennedy")); console.log("Willem-Alexander", "//=>", validateName("Willem-Alexander")); console.log("Jeanne d'Arc", "//=>", validateName("Jeanne d'Arc")); console.log("-' .", "//=>", validateName("-' ."));