LSformRule :: password : Added minValidRegex parameter and use preg_match() function instead of deprecated ereg() function

This commit is contained in:
Benjamin Renard 2014-06-19 16:41:27 +02:00
parent 6bf08b81a4
commit 5efa437612
3 changed files with 53 additions and 9 deletions

View file

@ -31,11 +31,23 @@
<term>regex</term>
<listitem>
<simpara>Expression(s) régulière(s) que doit respecter le mot de passe. Ce
paramètre peut être une expression régulière ou un tableau d'expressions
régulières.</simpara>
paramètre peut être une expression régulière au format
<ulink url='http://php.net/pcre.pattern'>PCRE</ulink> ou un tableau
d'expressions régulières.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>minValidRegex</term>
<listitem>
<simpara>Le nombre minimum d'expression régulière qui doivent être validées
pour que le mot de passe soit considéré comme correct. Ce paramètre est
optionnel, par défaut, toutes les expressions régulières doivent être
validées.</simpara>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

@ -513,7 +513,14 @@ $GLOBALS['LSobjects']['LSpeople'] = array (
'msg' => 'Your password must contain from 8 to 10 characters.',
'params' => array(
'minLength' => 8,
'maxLength' => 10
'maxLength' => 10,
'regex' => array (
'/[A-Z]/',
'/[a-z]/',
'/[0-9]/',
'/[^A-Za-z0-9]/',
),
'minValidRegex' => 3
)
)
),

View file

@ -37,6 +37,8 @@ class LSformRule_password extends LSformRule {
* - 'prohibitedValues' : Un tableau de valeurs interdites
* - 'regex' : une ou plusieurs expressions régulières
* devant matche
* - 'minValidRegex' : le nombre minimun d'expressions
* régulières à valider
* @param object $formElement L'objet formElement attaché
*
* @return boolean true si la valeur est valide, false sinon
@ -56,14 +58,30 @@ class LSformRule_password extends LSformRule {
if (!is_array($options['params']['regex'])) {
$options['params']['regex']=array($options['params']['regex']);
}
foreach($options['params']['regex'] as $regex) {
if (!ereg($regex,$value))
return;
if (isset($options['params']['minValidRegex'])) {
$options['params']['minValidRegex']=(int)$options['params']['minValidRegex'];
if ($options['params']['minValidRegex']==0 || $options['params']['minValidRegex']>count($options['params']['regex'])) {
$options['params']['minValidRegex']=count($options['params']['regex']);
}
}
else {
$options['params']['minValidRegex']=count($options['params']['regex']);
}
$valid=0;
foreach($options['params']['regex'] as $regex) {
if ($regex[0]!='/') {
LSerror :: addErrorCode('LSformRule_password_01');
continue;
}
if (preg_match($regex,$value))
$valid++;
}
if ($valid<$options['params']['minValidRegex'])
return;
}
if(is_array($options['params']['prohibitedValues'])) {
if (in_array($value,$options['params']['prohibitedValues']))
if(isset($options['params']['prohibitedValues']) && is_array($options['params']['prohibitedValues'])) {
if (in_array($value,$options['params']['prohibitedValues']))
return;
}
@ -72,4 +90,11 @@ class LSformRule_password extends LSformRule {
}
/*
* Error Codes
*/
LSerror :: defineError('LSformRule_password_01',
_("LSformRule_password : Invalid regex configured : %{regex}. You must use PCRE (begining by '/' caracter).")
);
?>