expresion regular selección entre varias palabras

Iniciado por kinos, 20 Septiembre 2010, 23:40 PM

0 Miembros y 1 Visitante están viendo este tema.

kinos

Buenas:

   ¿Cómo puedo hacer una expresión regular para que me indique si $palabra pertenece al grupo de palabras admitidas? Es que esta expresión permite palabras como "netttt", "comfjhg", "orgreja" y estas no deberían ser aceptadas.

Código (php) [Seleccionar]

   function es_palabra_valida($palabra) {
                    if (ereg("(com|net|org)", $palabra)) {
                        echo "La palabra $palabra es correcta<br>";
                        return true;
                    } else {
                        echo "La palabra $palabra no es válida<br>";
                        return false;
                    }
                }

~ Yoya ~

especifica un poco mas, y no use ereg ya es una función obsoleta ahora se usa preg_match...

Quieres que com, net y org este al final de la palabra... Trata de especificar lo que quieres hacer...
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

kinos

ok.

No al final sino que me devuelva true o false si está en este grupo {com, net, org}.

~ Yoya ~

que grupo¿¿??

si la palabra a pasar es: hcomla te la acepta
Ej:
Código (php) [Seleccionar]

<?php

$palabra 
'hcomasa';
if(
preg_match('/[com|net|org]/i',$palabra))
{
echo 
'si';
}
?>

Salida:
si

Dame un ejemplo de lo que quieres hacer...
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

Shell Root

Igual debería ser al final de la cadena. Por ejemplo,
Correctas,
www.google.org
www.google.com
www.google.net


No correctas,
www.google.org.edu
www.google.com.co
www.google.net.gov


Código (ExpReg) [Seleccionar]
(com|net|org)$
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

kinos

Haber si me explico mejor...  :silbar:

Correctas:

net
com
org

No correctas:

comunidad
orgullo
www.google.com
www.google.net

No se si una expresión regular sería la forma mas correcta, quizás con guardar en un array {net, com, org} y comparar $palabra con cada una para saber si es una de ellas. Quiero utilizar la expresión regular mas que nada por comodidad y por si es mas eficiente.


~ Yoya ~

Código (php) [Seleccionar]
<?php

$host 
= array('google.com','www.google.org','www.google.org.edu','www.google.com','www.google.org.gov');


foreach(
$host as $result)
{
   if(
preg_match('/\.?[com|net|org]$/i',$result$captura))
   {
      echo 
"Valida-> $result<br />";
   }else{
      echo 
"No valida-> $result<br />";
         }       
}

?>


Salida:
Valida-> google.com
Valida-> www.google.org
No valida-> www.google.org.edu
Valida-> www.google.com
No valida-> www.google.org.gov
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

kinos

#7
a ver que estamos rizando el rizo...

Correctas:

"nada por delante"com"nada por detrás"
"nada por delante"net"nada por detrás"
"nada por delante"org"nada por detrás"

No correctas:

www.google.org.gov
www.google.com
www.google.org.edu
www.google.org
comunidad
orgullo
www.google.com
www.google.net

Únicamente son correctas las palabras com, net, org.
Las palabras no correctas son todas las demás ya lleven "com" "net" "org" incluida en alguna parte ya sea delante, en medio, al final, o no lo lleven.

Correctas:

if(palabra == "com" || palabra == "net" || palabra =="org"){
  //es correcta
}else{
  //no es correcta
}

kinos

#8
Lo tengo ~ Yoya ~ :

Código (php) [Seleccionar]

<?php
$host 
= array('com','net','org','google.com','www.google.org','www.google.org.edu','www.google.com','www.google.org.gov');


                foreach(
$host as $result) {
                    if(
ereg('^(com|net|org)$',$result$captura)) {
                        echo 
"Valida-> $result<br />";
                    }else {
                        echo 
"No valida-> $result<br />";
                    }
                }
?>


Salida:

Valida-> com
Valida-> net
Valida-> org
No valida-> google.com
No valida-> www.google.org
No valida-> www.google.org.edu
No valida-> www.google.com
No valida-> www.google.org.gov

Lo único que con preg_match no me lo hace bien, no se porque...

Gracias.

~ Yoya ~

Que raro xD

Código (php) [Seleccionar]
<?php
$host 
= array('com','net','org','google.com.net','www.google.org','www.google.org.edu','www.google.com','www.google.org.gov');
 
 
               foreach(
$host as $result) {
                   if(
preg_match('/^(net|com|org)$/i',$result)) {
                       echo 
"Valida-> $result<br />";
                   }else {
                       echo 
"No valida-> $result<br />";
                   }
               }
?>
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.