Error “Delimiter must not be alphanumeric or backslash” en una expresión regular de PHP

publicado por: Anonymous

Tengo un codigo que me lanza el siguiente error:

Delimiter must not be alphanumeric or backslash.

Este es el codigo:

$cadena = 'Hola mi codigo es 987128 mi Nombre es Juan y Mi contraseña es #Juans16';

if(preg_match('Hola mi codigo es '."/[0-9]/".' mi Nombre es '."/[a-zA-Z]/".' y Mi contraseña es '."/[a-zA-Z0-9#]/",$cadena)){
    echo "Ok";
} else {
    echo "No";
}

He estado leyendo en otros foros y sé que tiene que ver con los delimitadores, pero no sé cuáles: todos están con las barras normales.

El fin del código es que me evalúe si lo que está en la variable $cadena cumpla con lo que se pide con las expresiones regulares, que por ejemplo, si en el codigo de la persona se coloca una letra, me lance “No” y así.

solución

No estás indicando la expresión regular de forma adecuada: el patrón debes darlo todo él dentro de un delimitador (/, # o el que sea). Y una vez dentro de él, expresas las expresiones regulares de forma normal, sin anidar más delimitadores (es decir, sin otro /, # o lo que sea).

En esencia, lo que debes hacer es:

preg_match("/patrón/","cadena")

Es decir, en tu caso:

$patron = "/Hola mi codigo es [0-9]+ mi Nombre es [a-zA-Z]+ y Mi contraseña es [a-zA-Z0-9#]+/";

Simplificando, en tu caso estabas diciendo algo así como:

$patron = "algo /[0-9]/ y otro algo";  // ¡INCORRECTO!
//              ^     ^

cuando debería ser:

$patron = "/algo [0-9]/";
//         ^          ^
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *