¿Validar la longitud de las URL, las letras mayúsculas y ciertas palabras completas?

Tengo un poco de código que toma la URL que alguien elige al registrarse en mi aplicación y la verifica. Pero me gustaría agregarle las siguientes restricciones.

  • Debe tener al menos 3 letras
  • Sin letras mayúsculas
  • No hay ciertas palabras "administrador, soporte, etc..."

Esto es lo que tengo hasta ahora, pero ahora solo está buscando letras especiales:

elseif($action == "validate"){

    $option = $_GET["option"];

    $value = $_GET["value"];

    switch($option){

    case "URL":             

$sql = mysql_select_db($value,$connect);
if(preg_match ( "@[^A-Za-z0-9]+@i", $value ) > 0) { $valid = "FALSE";   continue; }

$sql == 1 ?  $valid = "FALSE" : $valid = "TRUE";

}

preguntado el 22 de mayo de 12 a las 18:05

¿Por qué está utilizando literales de cadena para su true y false? -

Es parte de la validación del formulario si es un valor FALSO, el formulario del usuario lo recoge y le da al usuario la oportunidad de cambiarlo. Por qué ? :) -

@saluce sí, los números están bien -

La "i" después del delimitador de patrón indica una búsqueda que no distingue entre mayúsculas y minúsculas, por lo tanto, no es necesario hacer tanto AZ como az en su clase de caracteres regex, que yo sepa. -

2 Respuestas

if(preg_match("@^[a-z0-9]{3,25}$@", $value ) && (!preg_match("@admin|support|anything else@",$value))) { 
    //Restrict the word length to 25 characters at max, 3 at least.
    //Do some stuff. The $value meets the requirements as set forth
 ...
}

contestado el 22 de mayo de 12 a las 19:05

Gracias, por alguna razón usaste && en lugar de || ? ¿Sólo me preguntaba? - William H

@WilliamH, porque debe cumplir con todas las condiciones para ser válido: Soy papá

@WilliamH Si usas el || (o) operador, entonces el comportamiento esperado no ocurrirá (restringir el $value a la longitud y los caracteres, Y DE asegúrese de que no sea una palabra reservada o denegada) - PenguinCoder

No funcionará del todo, ya que el primer preg_match coincidirá con caracteres no alfanuméricos. deberías hacerlo preg_match("@[a-z0-9]{3,25}$@", $value) para hacer coincidir solo az minúsculas y números 0-9 (como se menciona en los comentarios sobre la pregunta) de 3 a 25 letras. - saludar

@saluce Arregló mi clase de personaje. - PenguinCoder

elseif($action == "validate"){

    $option = $_GET["option"];

    $value = $_GET["value"];

    switch($option){

    case "URL":             

    $sql = mysql_select_db($value,$connect);
    if(preg_match ( "@[^A-Za-z0-9]+@i", $value ) > 0) { $valid = "FALSE";   continue; }
    if(strlen($value) <= 3) { $valid = "FALSE";   continue; } //less than 3 char
    if(strstr($value, 'admin')) { $valid = "FALSE";   continue; }
      //.. the same for your other words

    $sql == 1 ?  $valid = "FALSE" : $valid = "TRUE";

}

contestado el 22 de mayo de 12 a las 18:05

¿Sería confiable condensar eso con el || o condiciones? - William H

@JasonHerndon eso debería estar bien. - Naftali

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