[^\.\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)