Voila pour toi :
$string = "s1fds0sdfds"; // faux
$string = "sdfsddf"; // ok
$string = "sdfd5sdf"; // ok
$string = "5sdfds"; // ok
if(preg_match("/^([a-z]{0,}[0-9]{0,1}[a-z]{0,})$/i", $string)) print "ok";
Je décompose la regex pour toi :
^ : indique le début de la phrase pour être plus restrictif
( ... ) : pour définir une chaine de caractère
[a-z]{0,} : indique que l'on cherche possiblement des lettre ( 0 ou plus )en début de la chaine de caractère
[0-9]{0,1} : indique que l'on cherche zéro ou un chiffre ( PS pas tester mais normalement [0-9]? fonctionne aussi )
[a-z]{0,} : on continue après la possibilité du chiffre ...
$ : et on indique la fin de ligne
Voila en espérant avoir répondue à ta demande
EDIT : La même chose si tu souhaite valider plusieurs chiffres :
"/^([a-z]{0,}[0-9]{0,1}[a-z]{0,})+$/i"
à savoir que si tu souhaite inclure les espaces il te faut :
"/^([a-z ]{0,}[0-9]{0,1}[a-z ]{0,})+$/i"