Compruebe si una cadena coincide con una expresión regular en JS


752

Quiero usar JavaScript (puede ser con jQuery) para hacer una validación del lado del cliente para verificar si una cadena coincide con la expresión regular:

^([a-z0-9]{5,})$

Idealmente, sería una expresión que devuelve verdadero o falso.

Soy un novato en JavaScript, ¿ match()hago lo que necesito? Parece comprobar si parte de una cadena coincide con una expresión regular, no con todo.


¿Desea una coincidencia completa o simplemente si la cadena contiene una subcadena coincidente?
Kerrek SB

1
Una coincidencia completa, no una subcadena coincidente.
Richard

Respuestas:


1196

Use regex.test()si todo lo que quiere es un resultado booleano:

console.log(/^([a-z0-9]{5,})$/.test('abc1')); // false

console.log(/^([a-z0-9]{5,})$/.test('abc12')); // true

console.log(/^([a-z0-9]{5,})$/.test('abc123')); // true

... y podría eliminar el ()de su expresión regular ya que no necesita una captura.


1
¿Qué hace el ^ inicial en la expresión regular allí?
PedroD

8
@PedroD ^ implica comenzar o comienza con
Nagaraju

Entonces, ¿cómo harías lo contrario? "no comienza con ..."
PedroD


3
@stackdave ¿tal vez estás trabajando con Java, en lugar de JavaScript?
sfarbota

176

test()Método de uso :

var term = "sample1";
var re = new RegExp("^([a-z0-9]{5,})$");
if (re.test(term)) {
    console.log("Valid");
} else {
    console.log("Invalid");
}

3
Tenga en cuenta que la versión con RegExppermite inyectar valores variables en la cadena de expresiones regulares.
Christophe Roussy

2
tuvo que eliminar las comillas dobles new RegExp("^([a-z0-9]{5,})$")para que funcione
Facundo Colombier

98

También puedes usar match():

if (str.match(/^([a-z0-9]{5,})$/)) {
    alert("match!");
}

Pero test()parece ser más rápido como puedes leer aquí .

Diferencia importante entre match()y test():

match()funciona solo con cadenas, pero test()también funciona con enteros.

12345.match(/^([a-z0-9]{5,})$/); // ERROR
/^([a-z0-9]{5,})$/.test(12345);  // true
/^([a-z0-9]{5,})$/.test(null);   // false

// Better watch out for undefined values
/^([a-z0-9]{5,})$/.test(undefined); // true

La razón por la que funciona con un número es porque el número se convierte en una cadena, porque se proporciona como un parámetro cuando espera una cadena. No confiaría en este comportamiento. Depende de la implementación de prueba de su entorno (). (la coincidencia falla porque los números no tienen un matchmiembro). Recomiendo convertir explícitamente su número a una cadena si desea usarlo con una expresión regular ( String(123)por ejemplo).
Bronzdragon

La coincidencia se puede usar aquí, pero si observa el rendimiento, el rendimiento testes un 30% mejor cuando solo queremos validar una cadena para que coincida con la expresión regular y no extraer subcadenas de ella.
Akansh

@pmrotule Sí, pero debería mencionarse antes de la descripción del partido.
Akansh

La diferencia más significativa entre test y match (y matchAll) es que match hace cosas como devolver una lista de todas las subcadenas coincidentes, mientras que la prueba solo verifica si hay alguna. Compruebe los métodos de expresiones regulares en javascript.info/regexp-methods
Juan Lanus

50

Úselo /youregexp/.test(yourString)si solo desea saber si su cadena coincide con la expresión regular.


8

Aquí hay un ejemplo que busca ciertas etiquetas HTML para que quede claro que /someregex/.test()devuelve un valor booleano:

if(/(span|h[0-6]|li|a)/i.test("h3")) alert('true');

6
 let str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
 let regexp = /[a-d]/gi;
 console.log(str.match(regexp));

2

Puedes probar esto, funciona para mí.

 <input type="text"  onchange="CheckValidAmount(this.value)" name="amount" required>

 <script type="text/javascript">
    function CheckValidAmount(amount) {          
       var a = /^(?:\d{1,3}(?:,\d{3})*|\d+)(?:\.\d+)?$/;
       if(amount.match(a)){
           alert("matches");
       }else{
        alert("does not match"); 
       }
    }
</script>

1

por favor prueba esta flor:

/^[a-z0-9\_\.\-]{2,20}\@[a-z0-9\_\-]{2,20}\.[a-z]{2,9}$/.test('abc@abc.abc');

cierto


1

tratar

 /^[a-z\d]{5,}$/.test(str)


2
¿Qué nuevo valor aporta esta respuesta de solo código a la página?
mickmackusa

actualmente es la solución más corta (debido a la simplificación de
expresiones regulares

1
Afeitar 1 personaje de los patrones publicados hace años. Bostezo.
mickmackusa

2
Simplemente deje un comentario debajo de una respuesta anterior para indicar que 0-9se puede reducir aaaaaaaaaaaaaaaaaaaaaaaaaaaaa \d. Ah, y que un grupo de captura no es necesario.
mickmackusa

1

Recomendaría usar el método execute que devuelve nulo si no existe una coincidencia; de lo contrario, devuelve un objeto útil.

let case1 = /^([a-z0-9]{5,})$/.exec("abc1");
console.log(case1); //null

let case2 = /^([a-z0-9]{5,})$/.exec("pass3434");
console.log(case2); // ['pass3434', 'pass3434', index:0, input:'pass3434', groups: undefined]

0
const regExpStr = "^([a-z0-9]{5,})$"
const result = new RegExp(regExpStr, 'g').test("Your string") // here I have used 'g' which means global search
console.log(result) // true if it matched, false if it doesn't
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.