Jump to content

Interdire les caractères non Latin dans les adresses


Recommended Posts

Bonjour,

 

Je m'occupe d'une boutique qui ship à l'international et le prestataire qui s'occupe des envois demande à ce que les adresses ne contiennent QUE des caractères latins. Non seulement, ça se tient, mais il semble que ce soit une demande générale des services de livraison.

 

La question est donc: comment ajouter ce filtre proprement dans Prestashop (1.6) ?

 

Mon premier réflexe est évidemment d'aller surcharger les validateurs des champs concernés pour ajouter un validateur isLatin($string).

 

Pour le moment, j'ai donc ceci:

class Validate extends ValidateCore
{

    /**
     * Check for a latin string validity
     *
     * @param string $string Texte to validate
     * @return bool Validity is ok or not
     */
    public static function isLatin($string)
    {
        if(preg_match('/[^\\p{Common}\\p{Latin}]/u', $string)){
            return false;
        }
        
        return true;
    }
    
    /**
     * Check for a postal address validity
     *
     * @param string $address Address to validate
     * @return bool Validity is ok or not
     */
    public static function isAddress($address)
    {
        return 
            (
                empty($address) || 
                preg_match(Tools::cleanNonUnicodeSupport('/^[^!<>[email protected]{}_$%]*$/u'), $address)
            ) && self::isLatin($address)
        ;
    }

}

Mais cette solution ne me parait pas optimale pour deux raisons:

  • On va vouloir faire de même avec le validateur isGenericName. Or, celui-ci étant appelé par d'autres classes ne devant pas avoir cette limitation, la solution ci-dessus va avoir des impacts au delà de son périmètre initial
  • Côté front, on va vouloir capturer un message d'erreur selon que le champ n'est pas valide à cause du test initial ou du nouveau

Idéalement, j'aimerai donc pouvoir déclarer plusieurs validateurs sur un champs pour permettre une gestion d'erreur plus fine.

 

Avez-vous une meilleure piste/recommandation sur la façon d'arriver au résultat souhaité ?

 

Merci.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More