Interrogation sur expression reguliere

Résolu
Bonjour,

A votre avis ici

if (preg_match("^[0-9]{15}$^", $ss))

signifie bien que la variable $ss doit avoir 15 caractères mini et maxi compris entre 0 et 9 ?

Merci
Configuration: Windows Vista
Firefox 3.5.2

13 réponses

  1. Bonjour,

    Non, l'expression est incorrecte, je viens de la tester, et cela dit si la chaine contient 15 chiffres à la suites. si on en met 16 ça dit vrai et si on met 15 chiffres et une lettre (ou plus) au début ou à la fin ça dit vrai aussi.

    en revanche, j'ai testé avec ça: if (preg_match("#^[0-9]{15}$#", $ss)) et ça n'a pas bugué.
    1
    1. merci pour ta reponse mais ca ne marche pas j ajouter un 16eme caractères et ca marche ....
      0
      1. Es-tu bien sûr d'avoir enlevé le dernier "^"?
        dans mes tests avec 16 chiffres ça ne marche pas...
        0
        1. quand j enlv le chapeau a ma syntaxe initial voila l erreur

          Warning: preg_match() [function.preg-match]: No ending delimiter '^' found in W:\patient.php on line 32
          0
          1. N'oublie pas les "#" en début et fin de chaine alors ^^
            0
            1. j comprends pas voila ce que j ai mis ca devrait fonctionenr mais il me le prend pas il ajoute encore

              if (preg_match("#^[0-9]{15}$#", $ss))
              0
              1. Etonnant!

                Avec ma page de test, ça marche pourtant bien:
                <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" 
                   "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
                <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
                	<head>
                		<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
                		<title>Page de tests php</title>
                		<?php 
                			function e($string) {
                				echo '<p>'. $string .' est de la bonne forme?: '. preg_match("#^[0-9]{15}$#", $string);
                				if (preg_match("#^[0-9]{15}$#", $string)) {
                					echo '-oui</p>';
                				}else{
                					echo '-non</p>';
                				}
                			}
                		?>
                		<script language="javascript">
                		</script>
                	</head>
                	<body>
                		<?php 
                			e("012345678901234");
                			e("123456789012345");
                			e("00000000000000");
                			e("000000000000000");
                			e("7777777777777777");
                			e("a454654621654567");
                			e("a454654a621654567");
                			e("12345678901234565465213015462465460546046");
                		?>
                	</body>
                </html>
                0
                1. ton stst fonctionne egalement chez moi mais pas la peut etre est ce du a l imbrication de mes if voici le code
                  if (isset($_POST['ok']))
                  {
                  if (preg_match("#^([0-9]){2}/([0-9]){2}/([1-2])([0-9]){3}$#", $naissance))
                  {
                  if (preg_match("#^[0-9]{15}$#", $ss))
                  {
                  $sql2= "UPDATE login SET nom='".$_POST['nom']."', prenom='".$_POST['prenom']."', naissance='".$_POST['naissance']."', ss='".$_POST['ss']."' WHERE ss='".$ss."'";
                  $req2= mysql_query($sql2) or die('Erreur SQL !'.$sql2.'<br>'.mysql_error());
                  if(isset($req2))
                  {
                  echo 'Patient modifié';
                  $sql = "SELECT * FROM login where ss='".$ss."'";
                  $req = mysql_query($sql) or die( mysql_error() ) ;
                  $total = mysql_num_rows($req);
                  {
                  echo '<center><table class="table2">'."\n";
                  echo '<tr >';
                  echo '<td class="td-title">Nom</td>';
                  echo '<td class="td-title">Prénom</td>';
                  echo '<td class="td-title">Date de naissance</td>';
                  echo '<td class="td-title">Numéro de sécurité sociale</td>';
                  echo '</tr>'."\n";
                  while($row = mysql_fetch_array($req))
                  {
                  echo '<tr>';
                  echo '<td class="td-p">'.$row["nom"].'</td>';
                  echo '<td class="td-p">'.$row["prenom"].'</td>';
                  echo '<td class="td-p">'.$row["naissance"].'</td>';
                  echo '<td class="td-p">'.$row["ss"].'</td>';
                  echo '</tr>'."\n";
                  }
                  echo '</table></center>'."\n";
                  }
                  }
                  }
                  else
                  {
                  echo "<script language=\"JavaScript\">\n";
                  echo "alert('Numéro de sécurité sociale invalide');";
                  echo 'window.history.back();';
                  echo "</script>";
                  }
                  }
                  else
                  {
                  echo "<script language=\"JavaScript\">\n";
                  echo "alert('Format date non valide');";
                  echo 'window.history.back();';
                  echo "</script>";
                  }
                  }
                  0
                  1. A première vue il y n'y a pas d'erreur...

                    Essaye de faire plein d'"echo" de contrôle voir où passe le programme, le contenu des variables, ...
                    0
                    1. je viens d tester en gros tout fonctionn auf le if preg match du $ss il effectue l update comme si il n y avait pas de conditions ....
                      0
                      1. pour info Pour tester j ai mis ca

                        if (preg_match("#^[1]{1}$#", $ss))

                        et la il me prend bien en compte mon expression reguliere ...
                        0
                        1. problme reolu il vient venait d la variable $ss qui recuperait une precedente session plutot que le POST ... merci de votre aide
                          0