Comprobación de cadenas php + javascript

Tengo una cadena que no cumple con el siguiente requisito: -

$uid = ca11a15e (the value called from database)

function _checkSn($uid)    
{
   $match1 = preg_match('/^p[a-z\d][a-z\d][1-6][a-z]\d{2}e$/',$uid);
   $match2 = preg_match('/^p[a-z\d][a-z\d]school$/',$uid);
   $match3 = preg_match('/^p[a-z\d][a-z\d]master$/',$uid);
   $match4 = preg_match('/^p[a-z\d][a-z\d]ee01$/',$uid);
   $doesMatch = ($match1 || $match2 || $match3 || $match4);
   return $doesMatch; 
}

En realidad, ¿de qué está hablando la fase? ¿Y cómo debo modificarlo para que el $uid pueda pasar la verificación?

preguntado el 03 de mayo de 12 a las 08:05

¿Debería el valor de $uid estar entre comillas? ¿Es eso un error tipográfico o cómo es su programa? -

el $uid es generado por el sistema, con la siguiente regla cal = escuela 1a = clase del estudiante 15 = número de clase del estudiante e = curso inscrito -

¿Cómo se relaciona eso con javascript? -

debemos $uid = ca11a15e be $uid = 'ca11a15e' es básicamente la pregunta de @LeonardChallis:

También puede combinar sus 4 RegEx'es a uno como preg_match('/^p[a-z\d][a-z\d]([1-6][a-z]\d{2}e|school|master|ee01)$/',$uid); -

2 Respuestas

Respuesta corta

Su uid no comienza con una 'p'. Todas las reglas comprueban que comienza con 'p'.

Respuesta larga

$match1 = preg_match('/^p[a-z\d][a-z\d][1-6][a-z]\d{2}e$/',$uid);

Esto es verificar algo del formato: la letra p, letra minúscula, número de 1 dígito, letra minúscula, número de 1 dígito, número del 1 al 6, letra minúscula, número (1 o 2 dígitos), la letra e

$match2 = preg_match('/^p[a-z\d][a-z\d]school$/',$uid);

Esto es verificar algo del formato: la letra p, letra minúscula, número de 1 dígito, letra minúscula, número de 1 dígito, la palabra 'escuela'

$match3 = preg_match('/^p[a-z\d][a-z\d]master$/',$uid);

Esto es verificar algo del formato: la letra p, letra minúscula, número de 1 dígito, letra minúscula, número de 1 dígito, la palabra 'maestro'

$match4 = preg_match('/^p[a-z\d][a-z\d]ee01$/',$uid);

Esto es verificar algo del formato: la letra p, letra minúscula, número de 1 dígito, letra minúscula, número de 1 dígito, la cadena 'ee01'

EDITAR

Si desea agregar 'c' a los caracteres permitidos al comienzo de la coincidencia, puede, por ejemplo, hacer:

$match1 = preg_match('/^[cp][a-z\d][a-z\d][1-6][a-z]\d{2}e$/',$uid);

[cp] en lugar de p comprueba YA SEA c o p como primera letra.

contestado el 03 de mayo de 12 a las 08:05

return (preg_match('/^p[a-z\d][a-z\d][1-6][a-z]\d{2}e$/',$uid) 
|| preg_match('/^p[a-z\d][a-z\d]school$/',$uid) 
|| preg_match('/^p[a-z\d][a-z\d]master$/',$uid) 
|| preg_match('/^p[a-z\d][a-z\d]ee01$/',$uid));

uid coincide con el patrón si es...

  • "p", dos veces una letra minúscula o un dígito, seguido de
  • un dígito 1-6, otra letra, dos dígitos, "e" o "escuela" o "maestro" o "ee01"

Por ejemplo, esto coincidiría con: "p6t3h56e" (primer patrón) o "p9hschool" (segundo).

"ca11a15e" no coincidirá con ninguno de estos porque todos requieren una "p" al principio.

Por cierto, esto se puede acortar a:

return (preg_match('/^p[a-z\d]{2}([1-6][a-z]\d{2}e|school|master|ee01)$/',$uid);

¿Todos los uid comenzarán con ac? Tal vez quiso decir esto, que coincidiría con "ca11a15e" (Observe la c en lugar de la p):

return (preg_match('/^c[a-z\d]{2}([1-6][a-z]\d{2}e|school|master|ee01)$/',$uid);

contestado el 03 de mayo de 12 a las 08:05

puedo cambiarlo a (preg_match('/^[az\d]{2}([1-6][az]\d{2}e|school|master|ee01)$/',$uid) para que los primeros 2 caracteres pueden ser cualquier letra? o lo cambio a (preg_match('/^pc[az\d]{2}([1-6][az]\d{2}e|school|master |ee01)$/',$uid) para que pueda atender tanto c como p? - jamón

Para permitir p o c, debe colocarlos en un grupo como [cp]. Solo cp solo coincidiría si hubiera c y p. - Armatus

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.