cette classe réunies plusieurs vérifications de données que je fais souvent pour mes sites : vérification de la validité d'une adresse mail, d'un lien, d'une date, d'une heure ou encore suppression de caractères interdits
Source / Exemple :
<?php
/**
- Class for all data verifications
*
- @version : 1
- @author : swaen
- /
class verifications
{
/**
*
- @param <String> $string
- @return <String>
- /
public static function deletHtmlTag($string)
{
iconv("ISO-8859-1","UTF-8//IGNORE",$string);
$string =htmlentities($string, ENT_NOQUOTES,"UTF-8");
return $string;
}
/**
- Check if the date is valid
*
- @param <int> $day
- @param <int> $month
- @param <int> $year
- @return <boolean>
- @access public
- /
public static function checkDate($day,$month,$year)
{
return checkdate($month,$day,$year);
}
/**
- check if an hour is valide
*
- @param <int> $hour
- @param <int> $minute
- @return <boolean>
- /
public static function checkHour($hour,$minute){
if($hour >= 00 && $hour <= 24 && $minute >= 00 && $minute <= 59){
return true;
}
return false;
}
/**
- Check if an url is valide (not a dead link)
*
- @param <string> $link (must begin by http:// or be a relative url)
- @return <boolean>
- /
public static function checkLink($link)
{
return (bool)filter_var($link,FILTER_VALIDATE_URL);
}
/**
- chack if an ip adress is valid
*
- @param <String> $ip
- @return <boolean>
- /
public static function checkIp($ip)
{
return (bool) filter_var($ip, FILTER_VALIDATE_IP) ;
}
/**
- check if an e-mail adress is valid
*
- @param <String> $email
- @return <boolean>
- /
public static function checkMail($email)
{
return (bool) filter_var($email, FILTER_VALIDATE_EMAIL) ;
}
/**
- format the string to delet all characters which are not numbers
*
- @param <String> $string
- @return <String>
- /
public static function onlyNumbers($string)
{
return preg_replace("[^0-9]","",$string);
}
/**
- delet all punctuation in a string
*
- @param <String> $string
- @return <String>
- /
public static function noPunctuation($string)
{
$string = stripslashes($string);
$array=array(":",";","\.",",","!","\?","¡","…","¿");
return preg_replace($array,"",$string);
}
/**
- Delet the char in a string (both are passed in parameter)
- if nothing is passed as char the function will delet all spaces
*
- @param <String> $string
- @param <String> $char
- @return <String>
- /
public static function deletOneChar($string,$char = " ")
{
return preg_replace('`'.preg_quote($char).'`', '', $string);
}
}
Conclusion :
dites moi ce que vous en pensez et s'il manque des vérifications qu'il serait, selon vous, intéressant d'ajouter et si je m'y prends mal pour certaines choses
Pour les gros projets on peut se permettre d'utiliser des frameworks tel que Symfony qui nous fournit un niveau d'abstraction pour la gestion des vérification (syntaxe yaml par exemple pour la validation des actions)
Mais pour des petits projets c'est bien trop lourd, c'est là que ta class s'avère utile ;)
Cela permet de faire un framework light ;)
A réutiliser pour ma part ;)
Y'a pas de raisons de ne pas laisser cette source en ligne.
Faire une classe, pourquoi pas... ce n'est pas indispensable, mais pourquoi pas, à condition que ce soit une classe statique (pas de constructeur, et toutes les méthodes statiques). L'intérêt d'une classe statique :
- embarquer des fonctions qui font partie d'un même package
- pouvoir appeler ces fonctions de n'importe où dans le code
- ne pas avoir à se soucier des noms des fonctions, puisque seul le nom de la classe ne doit pas être dupliqué (c'est un peu le principe des namespaces de php5.3, mais pas aussi poussé ni complexe).
Avec une classe instantiable, il faut avoir un objet instancié, qui ne sera accessible que dans une portée définie (script, fonction, classe, etc). C'est une limitation plus qu'une fonctionnalité.
Quand à l'extension Filter, oui, elle est installé de base dans PHP (enfin j'ai rien trouvé qui indique le contraire).
Encore quelques petites optimisations...
Inutile de stocker le résultat d'une fonction pour le retourner immédiatement. Le stockage dans une variable à un coût en perfs (vraiment dérisoire, mais quand on peut s'en passer...). Tu peux te permettre de renvoyer simplement la chaîne, par exemple dans deletOneChar() :
Au lieu de :
# $string = ereg_replace($char,"",$string);
# return $string;
Simplement :
return preg_replace('`'.preg_quote($char)'`', '', $string);
Ou encore :
# public function checkLink($link)
# {
# $conn = @fopen($link, "r");
# if(! $conn ){
# return $this->isValidLink = false;
# }
# return $this->isValidLink = true;
# }
Plus simplement :
public static function checkLink($link) {
return (bool) @fopen($link, 'r');
}
C'est un poil plus optimisé et pas moins lisible.
Voilà voilà.. Bon dimanche ^^
class MyClass {
public static myMethod($a) {
return $a*2;
}
}
echo MyClass::myMethod(8);
++
je ne savais pas non plus que pereg était plus performant que ereg... Quand au fait de faire une classe je dirai juste c'est pas faux et du coup je me demande pourquoi j'ai fait une classe (peut être parce que je veux TOUT faire en objet maintenant que je l'ai découvert...) Bon au final je me demande si je dois laisser cette source en ligne et je vous remercie de ces commentaires
Quant aux commentaires de NeigeDHiver, je plussoie. Utilise les possibilités de l'extension Filter de PHP 5 et remplace tous tes ereg_*() par les fonctions équivalentes plus performantes.
++
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.