Langages › Expressions régulières

Fil des billets - Fil des commentaires

lundi 5 septembre 2011

Vérification d'adresse IP

Bien qu'il soit rare que l'on ait à mettre une adresse IP dans un formulaire, il arrive que l'on ait besoin de les vérifier.

Donc, pour faire suite au billet Les assertions et vérification de formulaire, voici la petite fonction qui me permet de vérifier la syntaxe d'une adresse IP.

Fonction

<?php
function isIPAddress($ip) {
   $pattern = '/^\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b$/';
   if (preg_match($pattern, $ip) == 1) return true;
   else return false;
}
?>

Explications de l'expression régulière

L'expression vérifie que l'adresse contient 4 termes séparés par des points. La partie importante est celle que l'on retrouve deux fois:

(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)

Cette partie vérifie que les termes:

  • commencent par 25 et sont suivi d'un chiffre de 0 à 5
  • ou commencent par 2, suivi d'un chiffre de 0 à 4, suivi d'un chiffre de 0 à 9
  • ou peut commencer par un 0 ou un 1, suivi des nombres de 0 à 99

Ceci nous permet donc de vérifier que les termes couvrent la plage 000 à 255.

mardi 28 juillet 2009

Contrôler un email

Je ne vais pas me bloquer sur la version RFC d'une adresse e-mail, ni sur la vérification de son existence, mais sur une vérification syntaxique basique.

Syntaxe d'une adresse e-mail

Une adresse e-mail comporte 2 parties: utilisateur et domaine.
L'utilisateur peut compporter tout les caractères alphanumériques, ainsi que le "-", le " _" et le "+" (bien que rare). Le domaine est composé de plusieurs caractères alphanumériques, ainsi que du "-", le tout suivi d'un point et de 2 à 4 caractères.

Expression régulière

Nous pouvons donc valider la plupart des emails avec le masque suivant:

^([_a-z0-9-+.]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})$

Cette expression marche dans 95% dans cas. Elle doit bien entendu être traitée de manière case-insensitive (sans tenir compte de la casse).

jeudi 19 février 2009

Contrôler une url

Le but de cette expression régulière est de contrôler la validité (syntaxique) d'une URL.
Pour celà, nous partons des postulats suivants:

  • une url commence par http, https ou ftp (scheme),
  • elle peut contenir un nom d'utilisateur, et si tel est le cas elle peut aussi contenir un mot de passe,
    • le nom d'utilisateur fait au moins 3 caractères (user),
    • le mot de passe fait au moins 3 caractères et ne peut contenir ni espace ni @ (password),
  • le reste (l'url elle-même) peut contenir tout caractère de mot ainsi que certains caractères particuliers et des / (uri),
  • la casse n'est pas importante (www.g33k-zone.org est identique à wWw.g33k-ZONE.oRg).

Ceci nous donne:

!^
; scheme
(http|https|ftp)
\:\/\/
(
; user
   ([\w\-\.]{3,})
; password
   (\:([^\[email protected]]{3,}))[email protected]
)?
; uri
([\w\.\:\-\/#\?=\~\&]{2,}\/?\b)
$!
 
; version complète
!^(http|https|ftp)\:\/\/(([\w\-\.]{3,})(\:([\S]{3,}))[email protected])?([\w.:\-\/#\?=\~\&]{2,}\/?\b)$!

Ce masque vérifie que la chaîne envoyée est bien une url, en aucun cas il ne détecte les urls dans une chaîne plus grande. Pour celà, il faut le modifier très simplement en retirant la contrainte de début (^) et de fin ($) et en englobant l'expression entre des parenthèses (pour pouvoir retourner l'intégralité de la chaîne qui correspond).

Ce qui donne:

((http|https|ftp)\:\/\/(([\w\-\.]{3,})(\:([\S]{3,}))[email protected])?([\w.:\-\/#\?=\~\&]{2,}\/?\b))