Bonjour tout le monde, je n'ai pas l'habitude de poster, mais en m'occupant d'un site web, j'ai été confronté à un petit "bug", peut-on dire ! ( de mon cerveau surement

)
Pour ce problème, j'étais avec une wamp 2.2, avec PHP 5.3.8
Pour enregistrer un membre, j'utilise un petit formulaire et derrière une batterie de tests est censée me protéger de tout mauvais comportement ( volontaire ou non ) du futur membre en question.
Voici mon code de vérification:
<?php
if(isset($_POST['user_to_add']) and preg_match("#[a-z\s\.]#i", $_POST['user_to_add'])
and isset($_POST['password_to_add']) and preg_match("#[a-z\s]{10}#i",$_POST['password_to_add'])) {
$sql = mysql_query("SELECT * FROM membres WHERE login='".$_POST['user_to_add']."'");
$sql = mysql_fetch_array($sql);
if(empty($sql)) {
$db->add_membre($_POST['user_to_add'], $_POST['password_to_add']);
$add_noerror = TRUE;
}
else $add_error = "Le membre ".$_POST['user_to_add']." existe déjà.";
} else if((isset($_POST['user_to_add']) and !preg_match("#[a-z\s]#i", $_POST['user_to_add'])) or
(isset($_POST['password_to_add']) and !preg_match("#[a-z\s]{10}#i",$_POST['password_to_add']))) $add_error = "L'un des champs est vide ou erroné";
?>
Et ... bon, voici le formulaire, très simpliste, avec juste un mot de passe aléatoire de 10 caractères.
<h2> Ajouter un membre </h2>
<?php if(isset($add_error)) { print $add_error; unset($add_error); }
else if(isset($add_noerror)) { print "L'utilisateur ".$_POST['user_to_add']." à bien été ajouté."; unset($add_noerror); } ?>
<form action="./?page=admin" method="post" id="add_membre_form">
<table>
<tr>
<td><label for="user_to_add"> Utilisateur: </label></td>
<td><input type="text" name="user_to_add" /></td>
</tr>
<tr>
<td><label for="password_to_add"> Mot de passe (à noter): </label></td>
<td><input type="text" name="password_to_add" readonly="readonly" value="<?php print substr(md5(ceil(time()*time()*rand(100000000,1000000000000000)/rand(1,100000000))),0,10); ?>"/></td>
</tr>
</table>
<a href="#" onclick="javascript: document.forms['add_membre_form'].submit();"> Ajouter ce membre </a>
</form>
Jusque là, pas de problème ... Sauf que ce fourbe de preg_match me laisse passer des chaines comme: ee", haaa' ( d’ailleurs jolie erreur sql sur celle la

).
Je ne suis certes, pas du tout connaisseur en regex, mais là ... Y aurait-il une erreur dans mon code, ou est-ce bien un bug de PCRE ?
Merci d'avance de vos réponses !
PS: une solution DIY qui à l'air de bien fonctionner ( pour ceux qui ont le même problème que moi ) : on fait passer $_POST['user_to_add'] et $_POST['password_to_add'] dans un urlencode, et qu'on remplace les ' et - par rien du tout, et on vire aussi les points dans le $_POST['password_to_add']. Et on compare la valeur initiale à la nouvelle.