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";