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.
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;
}
}
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...
ok.
No al final sino que me devuelva true o false si está en este grupo {com, net, org}.
que grupo¿¿??
si la palabra a pasar es: hcomla te la acepta
Ej:
<?php
$palabra = 'hcomasa';
if(preg_match('/[com|net|org]/i',$palabra))
{
echo 'si';
}
?>
Salida:
si
Dame un ejemplo de lo que quieres hacer...
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
(com|net|org)$
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.
<?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
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
}
Lo tengo ~ Yoya ~ :
<?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.
Que raro xD
<?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 />";
}
}
?>
pues con esto:
[^\.\w](com|org|net)[^\.\w]
obtuve:
"com" google.com com comasagua organizacion org netcat net enet .net
Hay dos cosas que no entiendo:
- qué significa esta expresión $/i
- por qué hay que poner la barra delante /^
/ /*Aquí ExpReg */ $/i
^ /* Inicio de palabra */
$ /* Final de palabra */
[^\.\w](com|org|net)[^\.\w]
Umm, recordando que con las expresiones regulares se debe tener muchos cuidado, esa expresion no filtra bien y no funcionaria correctamente, seguro porque no la haz probado y la pusiste de rápido xD. Me acordó a algunos vectores XSS xDDD.
[^\.\w](com|org|net)[^\.\w]
[^\.\w](com|org|net)[^\.\w]
Hay esta el problema, primero estas indicando que algo debe existir delante y de tras de (com|org|net) para poder cumplirse la expresión, osea si ingreso com, org, net me la rechazara ya que para poder coincidir debe existir aunque sea una palabra delante y detrás, antes de entrar al paréntesis de captura...
Tambien no filtra bien las palabras debido a esto:
[^\.\w]
Estas indicando que al principio y al final debe existir una palabra que no contenga caracteres alfanuméricos o puntos...
Ejemplo:
<?php
$host = array('"êĻĥáĶéŕ•com"', 'com', '"com"','==org==');
foreach($host as $result)
{
if(preg_match('/[^\.\w](com|org|net)[^\.\w]/',$result, $captura))
{
echo "Valida-> $result<br />";
}else{
echo "No valida-> $result<br />";
}
}
?>
Salida:
Valida-> "êĻĥáĶéŕ•com"
No valida-> com
Valida-> "com"
Valida-> ==org==
i es para que no distinga entre mayúscula y minúscula(Case sensitive (http://es.wikipedia.org/wiki/Case_sensitive))