Fonction preg_match() concernant que les chiffres
Posté : 01 déc. 2014, 10:03
Bonjour à tous,
Je voulais faire une fonction qui faisait en sorte de vérifié qu'une expression ne contienne que des chiffres mais le problème et qu'il accepte quand même les lettres et les signes alors que mon regexp logiquement devrait les refuser.
Alors j'explique le but de ce petit site, il va permettre de réémettre des message de type NIP (qui sont des numéros d'identifiant patient) comportant 12 chiffres. L'utilisateur va pouvoir en saisir autant qu'il doit en réémettre exemple :
012345678912 987564321654 963258741258
Il peut les saisir donc comme je vient de le marquer les un après les autres séparés par un espace mais aussi pas un retour a la ligne.
Pour réémettre des messages de type NDA (numéro de dossiers) comportant cette fois ci 9 chiffres. Et donc l'utilisateur va pouvoir en saisir autant qu'il doit en réémettre exemple :
963258714 123456789 [...]
Au delà de 20 numéros il devra télécharger un fichier CSV. (mais je suis encore loin de se cas la )
La se corse un peu plus les choses :
Dans mon site web l'utilisateur choisis une application ou il voudra rejouer les messages, qui par la suite devra choisir a partir d'une liste (select) le type de message qu'il veut rejouer (LST ou MSG).
Lorsqu'il choisi par exemple MSG, une seconde liste s'affichera et il pourra choisir le Format du message qu'il veut rejouer maintenant et donc :
Si c'est un message M1 -> on rejoue sur un ou plusieurs NIP
Si il est différent de M1 -> on rejoue sur un ou plusieurs NDA
Voici mon code pour peut être comprendre un peux mieux le fonctionnement :

Je voulais faire une fonction qui faisait en sorte de vérifié qu'une expression ne contienne que des chiffres mais le problème et qu'il accepte quand même les lettres et les signes alors que mon regexp logiquement devrait les refuser.
Alors j'explique le but de ce petit site, il va permettre de réémettre des message de type NIP (qui sont des numéros d'identifiant patient) comportant 12 chiffres. L'utilisateur va pouvoir en saisir autant qu'il doit en réémettre exemple :
012345678912 987564321654 963258741258
Il peut les saisir donc comme je vient de le marquer les un après les autres séparés par un espace mais aussi pas un retour a la ligne.
Pour réémettre des messages de type NDA (numéro de dossiers) comportant cette fois ci 9 chiffres. Et donc l'utilisateur va pouvoir en saisir autant qu'il doit en réémettre exemple :
963258714 123456789 [...]
Au delà de 20 numéros il devra télécharger un fichier CSV. (mais je suis encore loin de se cas la )
La se corse un peu plus les choses :
Dans mon site web l'utilisateur choisis une application ou il voudra rejouer les messages, qui par la suite devra choisir a partir d'une liste (select) le type de message qu'il veut rejouer (LST ou MSG).
Lorsqu'il choisi par exemple MSG, une seconde liste s'affichera et il pourra choisir le Format du message qu'il veut rejouer maintenant et donc :
Si c'est un message M1 -> on rejoue sur un ou plusieurs NIP
Si il est différent de M1 -> on rejoue sur un ou plusieurs NDA
Voici mon code pour peut être comprendre un peux mieux le fonctionnement :
include( "../include/infirst.inc" );
include( "../include/myfuncts.inc" );
include( "../include/my_sgbd.inc" );
include( "../include/jquery_footer.js");
// vérification de la présence du cookie de l'utilisateur
Entete();
Titre_Page("Message" );
Haut_TCorps();
$appli = $_POST['abonne_destinataire'];
$TYPE_MSG = $_POST['TYPE_MSG'];
$FORMAT_MSG1 = $_POST['FORMAT_MSG1'];
$FORMAT_MSG = $_POST['FORMAT_MSG'];
$NIP_LST=$_POST['NIP_LST'];
$NDA_LST=$_POST['NDA_LST'];
echo " <H1><center>Réemission des messages</center></H1></br> ";
echo " <p> Pour quelles applications voulez vous réemettre :</p> ";
echo " <FORM method='post' id='Application' action='test2.php'> \n";
$hl7_IMS_ABONNE = $_POST['hl7_IMS_ABONNE'];
$requete = 'SELECT RECEIVING_APPLICATION FROM hl7_IMS_ABONNE order by 1' ;
$res= exec_select( 'ORACLE8', 'TCPAGE', $requete,'', $trace=true );
echo " <select id='abonne' name='abonne_destinataire' onchange='submit()'>";
for($i=0 ; $i < sizeof($res); $i++)
{
$resultat=($res[$i]['RECEIVING_APPLICATION']);
if($resultat == $appli)
{
echo " <option selected ='selected' value='".$resultat."'>".$resultat."</option>";
}
else
{
echo " <option value='".$resultat."'>".$resultat."</option>";
}
}
echo " </select><br>";
echo " <p>Vous avez sélectionné l'application : ";
$appli = $_POST['abonne_destinataire'];
echo $appli;
echo " </br></br> ";
/*--------------------------------------------------------------------------------------------*/
echo " <p>Quel type de message ou collection (MSG ou LST) voulez vous réemettre : <br><br>";
$requete1 = 'SELECT DISTINCT TYPE_MSG FROM hl7_IMS_REEMIS order by 1' ;
$res1= exec_select( 'ORACLE8', 'TCPAGE', $requete1,'', $trace=true );
echo " <select id='TYPE_MSG' name='TYPE_MSG' onchange='submit()'>";
for($i=0 ; $i < sizeof($res1); $i++)
{
$resultat1=($res1[$i]['TYPE_MSG']);
if($resultat1 == $TYPE_MSG)
{
echo " <option selected ='selected' value='".$resultat1."'>".$resultat1."</option>";
}
else
{
echo " <option value='".$resultat1."'>".$resultat1."</option>";
}
}
echo " </select><br>";
$TYPE_MSG = $_POST['TYPE_MSG'];
echo "</br> La valeur que vous avez sélectionné est : ".$TYPE_MSG;
echo "</br></br>";
/* -------------------------------------------Condition pour le MSG --------------------------------------------*/
if($TYPE_MSG == 'MSG')
{
echo " <select name='FORMAT_MSG1' id='FORMAT_MSG1' onchange='submit()'>";
if($FORMAT_MSG1 == '')
{
echo " <option selected ='selected' value=''></option>";
}
else {
echo " <option value=''></option>";
}
if($FORMAT_MSG1 == 'M1')
{
echo " <option selected ='selected' value='M1'>M1</option>";
}
else {
echo " <option value='M1'>M1</option>";
}
if($FORMAT_MSG1 == 'M2')
{
echo " <option selected ='selected' value='M2'>M2</option>";
}
else {
echo " <option value='M2'>M2</option>";
}
if($FORMAT_MSG1 == 'M6')
{
echo " <option selected ='selected' value='M6'>M6</option>";
}
else {
echo " <option value='M6'>M6</option>";
}
if($FORMAT_MSG1 == 'M8')
{
echo " <option selected ='selected' value='M8'>M8</option>";
}
else {
echo " <option value='M8'>M8</option>";
}
if($FORMAT_MSG1 == 'M9')
{
echo " <option selected ='selected' value='M9'>M9</option>";
}
else {
echo " <option value='M9'>M9</option>";
}
echo" </select>";
}
$FORMAT_MSG1 = $_POST['FORMAT_MSG1'];
echo "</br></br>";
if($FORMAT_MSG1 == 'M1')
{
if (isset($_POST['NIP_MSG']))
{
$NIP_MSG=$_POST['NIP_MSG'];
}else {
$NIP_MSG = '';
}
echo " Le(s) NIP que vous voulez rejouer est : ";
echo "<center><textarea id='NIP_MSG' name='NIP_MSG' rows='3' cols = '50'>";
echo $NIP_MSG;
echo "</textarea></center>";
//on découpe la chaîne en fonction des espaces rencontrés (eclatement d'une chaine)
$pattern = '/^(\d{12}\\s*)*$/';
$result = preg_match($pattern, $NIP_MSG);
$listNumPatient = preg_split('/[\s]+/', $NIP_MSG);
$i = 1;
$lenghtNumPatient = 12;
foreach ($listNumPatient as $numPatient)
{
if ($numPatient != '')
{
// La longueur actuelle est numDossier
$actualLength = strlen($numPatient);
// si la longueur de numDossier < 12 OU si la longueur de numDossier > 12
if ($actualLength < $lenghtNumPatient || $actualLength > $lenghtNumPatient)
{
echo '<p>Le numéro de dossier "' . $numPatient . '" (saisi en n°' . $i . ') fait moins ou plus de ' . $lenghtNumPatient . ' caractères</p>';
} else
{
echo '<p>Le numéro de dossier "' . $numPatient . '" est valide.</p>';
}
$i++;
}
}
}else
{
if (isset($_POST['NDA_MSG']))
{
$NDA_MSG=$_POST['NDA_MSG'];
}else {
$NDA_MSG = '';
}
echo " Le(s) NDA que vous voulez rejouer est : ";
echo "<center><textarea id='NDA_MSG' name='NDA_MSG' rows='3' cols = '50'>";
echo $NDA_MSG;
echo "</textarea></center>";
//on découpe la chaîne en fonction des espaces rencontrés (eclatement d'une chaine)
$pattern = '/^(\d{9}\\s*)*$/';
$result = preg_match($pattern, $NDA_MSG);
//on decoupe la chaine en fonction des espaces rencontres
$listNumDossiers1 = preg_split('/[\s]+/', $NDA_MSG);
//le dernier item est vide car la chaine se termine par un espace ce qui cree une entree
$i = 1; // pour aider l'utilisateur à savoir quel numéro de dossier il a mal saisi
$lenghtNumDossier1 = 9;
foreach ($listNumDossiers1 as $numDossier1)
{
if ($numDossier1 != '')
{
// La longueur actuelle est numDossier
$actualLength1 = strlen($numDossier1);
// si la longueur de numDossier < 9 OU si la longueur de numDossier >9
if ($actualLength1 < $lenghtNumDossier1 || $actualLength1 > $lenghtNumDossier1)
{
echo '<p>Le numéro de dossier "' . $numDossier1 . '" (saisi en n°' . $i . ') fait moins ou plus de ' . $lenghtNumDossier1 . ' caractères</p>';
} else
{
echo '<p>Le numéro de dossier "' . $numDossier1 . '" est valide.</p>';
}
$i++;
}
}
}
/* -------------------------------------------Condition pour le LST --------------------------------------------*/
if($TYPE_MSG == 'LST')
{
echo " <select name='FORMAT_MSG' id='FORMAT_MSG' onchange='submit()'>";
if(FORMAT_MSG == '')
{
echo " <option selected ='selected' value=''></option>";
}
else {
echo " <option value=''></option>";
}
if(FORMAT_MSG == 'DOSP')
{
echo " <option selected ='selected' value='DOSP'>DOSP</option>";
}
else {
echo " <option value='DOSP'>DOSP</option>";
}
if(FORMAT_MSG == 'NDOS')
{
echo " <option selected ='selected' value='NDOS'>NDOS</option>";
}
else {
echo " <option value='NDOS'>NDOS</option>";
}
if(FORMAT_MSG == 'DSIT')
{
echo " <option selected ='selected' value='DSIT'>DSIT</option>";
}
else {
echo " <option value='DSIT'>DSIT</option>";
}
echo " </select>";
}
echo " </br>";
$FORMAT_MSG = $_POST['FORMAT_MSG'];
if($FORMAT_MSG == 'DOSP')
{
if (isset($_POST['NIP_LST']))
{
$NIP_LST=$_POST['NIP_LST'];
}else
{
$NIP_LST = '';
}
echo " Le(s) NIP que vous voulez rejouer est : ";
echo " <center><textarea id='NIP_LST' name='NIP_LST' rows='3' cols = '50'>";
echo $NIP_LST;
echo " </textarea></center>";
$pattern = '/^([0-9]{12}\\s*)*$/';
$result_LST_NIP = preg_match($pattern, $NIP_LST);
$listNumPatientLST = preg_split('/[\s]+/', $NIP_LST);
$i = 1;
$lenghtNumPatientLST = 12;
foreach ($listNumPatientLST as $numPatientLST)
{
if ($numPatientLST != '')
{
// La longueur actuelle est numDossier
$actualLengthLST = strlen($numPatientLST);
// si la longueur de numDossier < 12 OU si la longueur de numDossier > 12
if ($actualLengthLST < $lenghtNumPatientLST || $actualLengthLST > $lenghtNumPatientLST)
{
echo '<p>Le numéro de dossier "' . $numPatientLST . '" (saisi en n°' . $i . ') fait moins ou plus de ' . $lenghtNumPatientLST . ' caractères</p>';
} else
{
echo '<p>Le numéro de dossier "' . $numPatientLST . '" est valide.</p>';
}
$i++;
}
}
}else
{
if (isset($_POST['NDA_LST']))
{
$NDA_LST=$_POST['NDA_LST'];
}else
{
$NDA_LST = '';
}
echo " Le(s) NDA que vous voulez rejouer est : ";
echo "<center><textarea id='NDA_LST' name='NDA_LST' rows='3' cols = '50'>";
echo $NDA_LST;
echo "</textarea></center>";
$pattern = '/^(\d{9}\\s*)*$/';
$result_LST_NDA = preg_match($pattern, $NDA_LST);
$listNumDossiersLST1 = preg_split('/[\s]+/', $NDA_LST);
$i = 1; // pour aider l'utilisateur à savoir quel numéro de dossier il a mal saisi
$lenghtNumDossierLST1 = 9;
foreach ($listNumDossiersLST1 as $numDossierLST1)
{
if ($numDossierLST1 != '')
{
$actualLengthLST1 = strlen($numDossierLST1);
if ($actualLengthLST1 < $lenghtNumDossierLST1|| $actualLengthLST1 > $lenghtNumDossierLST1)
{
echo '<p>Le numéro de dossier "' . $numDossierLST1 . '" (saisi en n°' . $i . ') fait moins ou plus de ' . $lenghtNumDossierLST1 . ' caractères</p>';
} else
{
echo '<p>Le numéro de dossier "' . $numDossierLST1 . '" est valide.</p>';
}
$i++;
}
}
}
/*echo " <a>Voulez vous réemettre en mode BATCH ou en STREAM : </a><br><br>
<input type='radio' name='MODE_REEMIS' value='BATCH' id='BATCH' /> BATCH
<input type='radio' name='MODE_REEMIS' value='STREAM' id='STREAM' /> STREAM<br><br>";*/
echo "<center><input type='submit' name='valid' value='Sauver' style='width:100px'></center>";
echo " <br><br>";
echo " </FORM>";
Merci d'avance