Page 1 sur 1
probleme regex mail
Posté : 07 avr. 2023, 05:29
par filou80
Bonjour à tous,
Je rencontre un problème lors de l'application de ma regex ci-dessous:
Code : Tout sélectionner
// Regex qui controle le mail avec protection injection sql
define('REGEX_MAIL_INJECTION_SQL', "/^(?!.*[<>\/@])[-\w.%+]+@[-\w.]+\.[a-zA-Z]{2,}$/");
Voici input mail :
Code : Tout sélectionner
<div class="mt-3">
<label for="exampleFormControlInput1" class="form-label texte"> Mail de contact :</label>
<input type="email" class="form-control" id="mail" name="mail" pattern="<?=REGEX_MAIL_INJECTION_SQL?> placeholder="Mail (obligatoire)" <?php if (isset($mail)) echo 'value="' . htmlspecialchars($mail) . '"'; ?> required>
</div>
et voici mon controlleur :
Code : Tout sélectionner
$mail = trim(filter_input(INPUT_POST, 'mail', FILTER_SANITIZE_EMAIL));
if (!preg_match(REGEX_MAIL_INJECTION_SQL, $mail)) {
// Si la variable mail ne correspond pas à l'expression régulière
// renvoyer un message d'erreur ou faire quelque chose d'autre
$error["mail"] = 'L\'adresse email n\'est pas valide';
}
cela me renvoie toujours :
veuillez modifier la valeur pour correspondre au format demandé.
Ma page ou est définie la regex est bien appelé .
Je sais pas quoi faire.
Merci par avance pour votre aide.
@+ filou
Re: probleme regex mail
Posté : 07 avr. 2023, 10:51
par @rthur
Regarde le code HTML généré, tu verras que tu as un problème de guillemets

Re: probleme regex mail
Posté : 07 avr. 2023, 19:15
par filou80
Merci pour ton aide,
mais cela ne change pas j'ai toujours mon message d'erreur.
Code : Tout sélectionner
<div class="mt-3">
<label for="exampleFormControlInput1" class="form-label texte"> Mail de contact :</label>
<input type="email" class="form-control" id="mail" name="mail" pattern="<?=REGEX_MAIL_INJECTION_SQL?>" placeholder="Mail (obligatoire)" <?php if (isset($mail)) echo 'value="' . htmlspecialchars($mail) . '"'; ?> required>
</div>
<div class="error mb-3"><?= htmlentities($error['mail'] ?? '', ENT_QUOTES, 'UTF-8')?></div>
Merci par avance pour votre aide.
@+Filou
Re: probleme regex mail
Posté : 07 avr. 2023, 19:23
par filou80
Dans l’inspecteur web cela me met : pattern="/^(?!.*[<>\/@])[-\w.%+]+@[-\w.]+\.[a-zA-Z]{2,}$/"
Re: probleme regex mail
Posté : 07 avr. 2023, 21:16
par @rthur
Pour utiliser un pattern dans un input tu n'as pas besoin du délimiteur / au début et à la fin.
Par ailleurs, ton pattern me semble fonctionner pour aucune adresse mail, teste le avant, par exemple sur
https://regex101.com
Re: probleme regex mail
Posté : 07 avr. 2023, 22:29
par two3d
Tu devrais autoriser les caractères qu'il faut plutôt que de chercher à enlever tous les caractères interdits, j'ai fais un regex PHP à ce sujet, ça te montrera comment je procède et comment tu peux le faire :
https://www.c2script.com/scripts/verifi ... hp-s2.html
Re: probleme regex mail
Posté : 07 avr. 2023, 22:40
par filou80
Merci pour votre aide.
C'est vraiment des que je met la pattern dans input que rien ne fonctionne .
Merci pour votre aide.
@+Filou
Re: probleme regex mail
Posté : 07 avr. 2023, 22:52
par two3d
Pour le côté HTML mets un champ de type email, vérifie ensuite ce qu'à rentré l'utilisateur avec PHP.
https://developer.mozilla.org/fr/docs/W ... es/pattern
Comme la dit @rthur, pas besoin de délimiteur (/ dans ton cas) et pas non plus besoin de début et de fin : ^ et $
Re: probleme regex mail
Posté : 08 avr. 2023, 05:11
par filou80
J'ai tester ma define dans regex101 elle fonctionne :
Code : Tout sélectionner
define('REGEX_MAIL_INJECTION_SQL', "(?!.*[<>/])^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}");
voici ma vue :
Code : Tout sélectionner
<div class="mt-3">
<label for="exampleFormControlInput1" class="form-label texte"> Mail de contact :</label>
<input type="email" class="form-control" id="mail" name="mail" pattern="<?=REGEX_MAIL_INJECTION_SQL?>" placeholder="Mail (obligatoire)" <?php if (isset($mail)) echo 'value="' . htmlspecialchars($mail) . '"'; ?> required>
</div>
<div class="error mb-3"><?= htmlentities($error['mail'] ?? '', ENT_QUOTES, 'UTF-8')?></div>
et mon controlleur :
Code : Tout sélectionner
<?php
require_once(dirname(__FILE__).'/../Configuration/config.php');
require_once(dirname(__FILE__).'/../Public/Utiles/regex.php');
require_once(dirname(__FILE__).'/../Public/Utiles/phpmailer.php');
// Inclure le modele
require_once(dirname(__FILE__).'/../Modeles/ChoixContactAccueil.php');
session_start(); // initialise la session
$results = array();
// Variable(s) a controlées
$code = trim(filter_input(INPUT_GET, 'code', FILTER_SANITIZE_NUMBER_INT));
// Appel de la méthode voirTable pour récupérer les données de la table
$choixContactAccueil = new ChoixContactAccueil();
$results = $choixContactAccueil->voirTable();
//On verifie que le formulaire est envoyé
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
//Champ mail
$mail = trim(filter_input(INPUT_POST, 'mail', FILTER_SANITIZE_EMAIL));
if (!preg_match(REGEX_MAIL_INJECTION_SQL, $mail)) {
// Si la variable mail ne correspond pas à l'expression régulière
// renvoyer un message d'erreur ou faire quelque chose d'autre
$error["mail"] = 'L\'adresse email n\'est pas valide';
}
if(empty($mail)){
$error["mail"] = 'Le mail doit être renseigné.';
}
avec c'est bout de code affiché, j'obtiens toujours une erreur :
Warning: preg_match(): Unknown modifier '^' in /volume1/Controlleurs/contactAccueil-ctrl.php on line 26
Merci par avance pour vos retours.
@+ Filou
Re: probleme regex mail
Posté : 08 avr. 2023, 05:22
par filou80
La c'est le !preg_match qui me bloque si j’enlève le contrôle cela fonctionne.
Comment faire pour que ma regex soit contrôlé coté serveur ?
Merci pour vos retours.
@+ Filou
Re: probleme regex mail
Posté : 08 avr. 2023, 12:18
par two3d
preg_match a besoin des délimiteurs et tu dois dire ^ et $
https://www.php.net/manual/fr/function.preg-match.php
Re: [RESOLU] probleme regex mail
Posté : 08 avr. 2023, 20:39
par filou80
Merci,
effectivement avec le preg_match il faut le délimiteur dans la define du coup j'en ai créer 2
Encore merci pour votre aide.
@+ Filou
Re: [RESOLU] probleme regex mail
Posté : 08 avr. 2023, 20:47
par two3d
Pas besoin d'en créer deux, rajoute simplement au moment du preg_match :
preg_match("#^" . REGEX_MAIL_INJECTION_SQL . "$#",...