Aqui va otro ejemplo, valida que las variables ya sean por valor o referencia empiecen siempre con una letra y que los sigueentes sean números, _ , o letras; como esta echo con clases podría reutilizarse el método verificar por ser este el mismo para ambos, solo cambiaría en si el diagrama de estados por ente el método mover
  Código PHP:
    <?php 
class AFN_cadena
{
    var $actual;//POSICION del arreglo que se esta utilizando
    function mover($s,$c)
    {
        if($s==1)
        {
            if((97<=ord($c))and(ord($c)<=122))        
                $s=2;
            else
                $s=3;
        }
        elseif($s==2)
        {
            if((97<=ord($c))and(ord($c)<=122)or((48<=ord($c))and(ord($c)<=57))or($c=="_"))        
                $s=2;
            else                    
                $s=3;                        
        }
        return $s;
    }
    function verificar($cadena)
    {
        $lon=strlen($cadena);
        $s=1;            //inicializo el estado s en el primer estado que es 1
        $c=$cadena[0];     //saca el primer elemento del número
        $this->actual=0;
        $co="";
        while (($co<>$cadena)and($s<>6))
        {
            $co=$co.$c;
            $s=$this->mover($s,$c);
            $this->actual++;
            if ($this->actual<$lon)
            {
                $c=$cadena[$this->actual];
            }
        }
        if($s==2)
            return true;
        else
            return false;
    }
}// fin de clase
$cadena=$_POST["edCadena"];
$afn=new AFN_cadena;
if($afn->verificar($cadena))
    echo "esta bien";
else
    echo "esta mal";