<?php

// ------------------------------------------------------------------------- //
// Autoriser seulement certains caractères dans une chaine                   //
// ------------------------------------------------------------------------- //
// Auteur: Dinesh <dinesh@dinsoft.net>                                       //
// Web:    http://www.dinsoft.net                                            //
// ------------------------------------------------------------------------- //

/*
Il parait qu'avec les codes d'ereg, certains caractères peuvent aussi passer !!
Voici un code quasi infaillbe pour laisser passer que les chars qui vous
souhaitez, et en plus l'utilisation est simple ;P

Par défaut, la fonction laisse passer la caractères suivants:

- abcdefghijklmnopqrstuvwxyz
- ABCDEFGHIJKLMNOPQRSTUVWXYZ
- 0123456789

Donc si vous voulez savoir si une chaine contient un autre caractère, c'est:

if (!CheckChars("r3q6t346H*&Q346h")) echo "Erreur";

Et comme vous pouvez le voir dans les exemples, vous pouvez aussi ajouter des
caractères autorisés.
*/

function CheckChars($chaine, $chars = "")
{
  for (
$i=0; $i < strlen($chaine); $i++) {
    
$error = 0;
    
$asc = ord(substr($chaine, $i, 1));

    if ((
$asc < 98) OR ($asc > 122)) { // ce n'est pas un char minuscule
      
$error = 1;
      if ((
$asc < 65) OR ($asc > 90)) { // ce n'est pas un char masjuscule
        
$error = 1;
        if ((
$asc < 48) OR ($asc > 57)) { // ce n'est pas un chiffre !
          
$error = 1;
          }
        else
$error = 0;
        }
      else
$error = 0;
      }
    else
$error = 0;

    if (
$error == 1) { // est-ce un caractère spéfifié ?
      
for ($ii=0; $ii < strlen($chars); $ii++) {
        
$accepted = ord(substr($chars, $ii, 1));
        if (
$accepted == $asc) $error = 0;
        }
      if (
$error == 1) return 0; // Erreur !
      
}
    }
  return
1;
}

// Exemple
$chaine = $_GET['chaine'];

if (!
CheckChars($chaine)) {
  echo
"[:ERREUR:] Il y a une erreur au premier check !<br>\r\n";
  }
else {
  echo
"[:Merci:] Premier check réussi !<br>\n";
  }

if (!
CheckChars($chaine, ".")) {
  echo
"[:ERREUR:] Il y a une erreur au second check !<br>\r\n";
  }
else {
  echo
"[:Merci:] Second check réussi !<br>\n";
  }

if (!
CheckChars($chaine, "@.")) {
  echo
"[:ERREUR:] Il y a une erreur au troisième check !<br>\r\n";
  }
else {
  echo
"[:Merci:] Troisième check réussi !<br>\n";
  }
?>