Foros del Web » Programando para Internet » PHP »

PHP OO regex para validar un campo de texto

Estas en el tema de regex para validar un campo de texto en el foro de PHP en Foros del Web. Sé que es muy triste hacer todo lo que estoy haciendo para preguntar lo que voy a preguntar (que debe ser una chorrada como un ...
  #1 (permalink)  
Antiguo 26/08/2013, 13:23
 
Fecha de Ingreso: agosto-2013
Mensajes: 5
Antigüedad: 10 años, 7 meses
Puntos: 0
Pregunta regex para validar un campo de texto

Sé que es muy triste hacer todo lo que estoy haciendo para preguntar lo que voy a preguntar (que debe ser una chorrada como un piano de cola), pero cuando la ceguera te inunda la vista... chau! No se ve y es una chorrada, pero que no se ve!

Esto es un formulario de contacto. En el campo Nombre, deseo validar así:

if (preg_match('/[^A-Za-z áéíóúÁÉÍÓÚñÑçÇ-]/', $_POST['name']) == 1) {
echo "error";
}else{
echo"OK";
}

Este control, ¿valida el campo de texto Nombre aceptando caracteres alfabéticos, las vocales con tilde, las ñÑ y çÇ, el guión normal - y el espacio blanco (lo he colocado entre la z y la á)?

Gracias a quien vea y comparta conmigo la respuesta, porque va a sacarme de una ceguera que insisto... no soy capaz de ver donde está mi error.
Gracias!.
  #2 (permalink)  
Antiguo 26/08/2013, 13:43
 
Fecha de Ingreso: marzo-2008
Ubicación: Posadas Misiones Argentina
Mensajes: 480
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: regex para validar un campo de texto

Hola

Para las validaciones de los nombres, yo utilizo una función en javascript , y no php, me parece mas fácil. De todas maneras otros compañeros del foro te podrán contestar.
  #3 (permalink)  
Antiguo 26/08/2013, 13:44
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: regex para validar un campo de texto

bueno estás bastante lejos de la respuesta.. todo mal :'D

Código PHP:
if (preg_match('/[^A-Za-z áéíóúÁÉÍÓÚñÑçÇ-]/'$_POST['name']) == 1) { 
PUNTO 1
$_POST['name']) == 1 .. es una condición, como resultado dará un boolean, y en la documentación de PHP dice que el segundo parámetro debe ser un String, el cual es el que se evaluará la expresión regular.

PUNTO 2
En la expresión regular estás omitiendo el caracter cuantificador.. por lo cual esa expresión sólo sirve si se trata de un solo caracter. (http://www.php.net/manual/en/regexp.reference.meta.php)

PUNTO 3
para el correcto funcionamiento de los tildes dentro de la expresión debes asegurarte de guardar el documento con la codificación adecuada o en su defecto utilizar expresiones unicode (http://php.net/manual/en/regexp.reference.unicode.php)

PUNTO 4
para el tema de las expresiones regulares te recomiendo bastante utilices un programa llamado REGEXBUDDY, con el puedes testear fácilmente tus regex.

saludos.
__________________
More about me...
~ @rhyudek1
~ Github
  #4 (permalink)  
Antiguo 27/08/2013, 06:17
 
Fecha de Ingreso: agosto-2013
Mensajes: 5
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: regex para validar un campo de texto

Tienes toda la razón Hidek1, no puedo hacer lo que he hecho, sobre todo preguntar sin documentar bien la pregunta. Supongo que es parte de lo ciego que estaba cuando la hice por primera vez.

Voy a reflejar lo que hay realmente en la web para poder detectar el error adecuadamente.

Código PHP:
if (empty($_POST) === false) {
    if (empty(
$_POST['name']) === true) {
        
$errors[] = '* El campo <u>Nombre</u> es obligatorio.';
    }elseif (
preg_match('/[^A-Za-z áéíóúÁÉÍÓÚñÑçÇ-]+/'$_POST['name']) == 1) {
        
$errors[] = 'El campo <u>Nombre</u> s&oacute;lo puede contener caracteres alfab&eacute;ticos y/o el - (gui&oacute;n normal).';
    }

Sobre PUNTO 1 Hidek1 creo que has interpretado mal el código, pues $_POST está encerrado entre paréntesis. De todas formas, queda abierta la respuesta, porque cierto es que hay más cosas.
Con respecto al PUNTO 2, falta el cuantificador, cierto. Aunque sí que lo estaba poniendo, seguro que en alguna de las pruebas que realicé antes de preguntar, en una de esas -a la desesperada-, pues lo quité y así me va... ¡qué borriquito! ¡Cegatone Malone!
Con respecto al PUNTO 3 no sé si será lo correcto, pero tengo esto dentro de <head>

Código HTML:
Ver original
  1.     <meta charset="UTF-8">
  2.     ...
  3. </head>

Sobre REGEXBUDDY PUNTO 4, te diré que lo he tenido instalado, pero ya no. En aquel momento, se me hizo un mundo tan grande, que lo desestimé. Tendré que volver a instalarlo y sacarle rendimiento. Gracias Hidek1 por recordarme. Mientras trato de resolver, dejo aún la pregunta abierta.

---

Cita:
Iniciado por Hidek1 Ver Mensaje
bueno estás bastante lejos de la respuesta.. todo mal :'D

Código PHP:
if (preg_match('/[^A-Za-z áéíóúÁÉÍÓÚñÑçÇ-]/'$_POST['name']) == 1) { 
PUNTO 1
$_POST['name']) == 1 .. es una condición, como resultado dará un boolean, y en la documentación de PHP dice que el segundo parámetro debe ser un String, el cual es el que se evaluará la expresión regular.

PUNTO 2
En la expresión regular estás omitiendo el caracter cuantificador.. por lo cual esa expresión sólo sirve si se trata de un solo caracter. ([url]http://www.php.net/manual/en/regexp.reference.meta.php[/url])

PUNTO 3
para el correcto funcionamiento de los tildes dentro de la expresión debes asegurarte de guardar el documento con la codificación adecuada o en su defecto utilizar expresiones unicode ([url]http://php.net/manual/en/regexp.reference.unicode.php[/url])

PUNTO 4
para el tema de las expresiones regulares te recomiendo bastante utilices un programa llamado REGEXBUDDY, con el puedes testear fácilmente tus regex.

saludos.
  #5 (permalink)  
Antiguo 27/08/2013, 13:33
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: regex para validar un campo de texto

tienes razón sobre el punto 1, no vi el paréntesis.
sobre el punto 3, fíjate más que nada en \p{L} qué creo es justo lo que necesitas. (tildes, eñes, etc..)

saludos cordiales.
__________________
More about me...
~ @rhyudek1
~ Github

Etiquetas: controles, formulario, regexp
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:10.