porque al hacer un return retorna false y ya no llega a la segunda comprobación, debes hacer todo en la misma expresión regular o sino organizar la lógica de tu función de modo que se pueda pasar por todos los condicionales.
Si quieres aprender de expresiones regulares:
http://www.forosdelweb.com/f18/aport...s-pcre-646110/
Si quieres entender las funciones:
Cita: Los valores son devueltos usando la sentencia opcional return. Se puede devolver cualquier tipo, incluidos arrays y objetos. Esto causa que la función finalice su ejecución inmediatamente y pase el control de nuevo a la línea desde la que fue llamada.
http://www.php.net/manual/es/functio...ing-values.php
Saludos.