web-dev-qa-db-fra.com

Comment utiliser une regex pour valider un FormField?

Existe-t-il un moyen de valider simplement un champ de formulaire avec une expression régulière?

J'ai pensé à quelque chose comme ça:

<field name="firstname" type="text" label="Firstname"
       validate="regex" regex=".*" />
6
Harald Leithner

S'il n'y a pas de réponse native, j'ai une solution pour le faire avec une classe JFormRule propre.

Créez un fichier dans votre répertoire composant/models/form/rules appelé regex.php. Insérez la source ci-dessous.

class componentnameFormRuleRegex extends JFormRule {

    public function test(&$element, $value, $group = null, &$input = null, &$form = null)   {

        $this->regex = (string)$element['regex'];

        return parent::test($element, $value, $group, $input, $form);
    }   
}

Ajoutez le chemin de votre répertoire de règles à l'attribut addRulePath du fichier xml et ajoutez validate="componentname.regex" et regex="$regularexpression$" au champ que vous souhaitez valider.

La classe ajoute la valeur de l'attribut regex à JFormRule et utilise la fonction de test native pour la validation.

3
Harald Leithner

Vous pouvez utiliser validation côté client pour cela, mais vous devrez créer un champ de formulaire personnalisé pour que cela se produise.

En supposant que vous utilisiez Joomla 3.4, vous devez d’abord initialiser le script de validation, comme suit:

JHtml::_('behavior.formvalidator');

Ensuite, pour votre champ, vous devez ajouter la classe validate-changeme

<field name="firstname" type="text" label="Firstname" class="validate-changeme" />

Ensuite, dans votre script de champ de formulaire personnalisé, vous pouvez ajouter votre regex pour la validation de la manière suivante:

$doc = JFactory::getDocument();
$doc->addScriptDeclaration("
    jQuery(document).ready(function(){
       document.formvalidator.setHandler('changeme', function(value) {
          regex=/^\d{4}-\d{2}-\d{2}$/;
          return regex.test(value);
       });
    });
");

N'oubliez pas de remplacer changeme par ce qui vous convient le mieux.

J'espère que cela t'aides

3
Lodder