E-mail validation php > hulp nodig bij aanpassing in script
Ik heb een klein probleem met de e-mail validatie van een bestelformulier.
Alle e-mailadressen met een '-' na het @ worden niet geaccepteerd.
Ik weet alleen niet waar ik nu het '-' moet plaatsen om te zorgen dat de e-mailadressen met een '-' ook worden geaccepteerd.
Ben geen held met php scripts dus hoop op jullie hulp en uitleg. Heb al gezocht op het internet en forum maar kom er gewoonweg niet zo goed uit. Al een aantal dingen geprobeerd maar lukt ook niet helaas.
Hieronder mijn script:
$userPattern = '[0-9a-z\\.]+';
$domainPattern = '[0-9a-z\\.]+\\.[a-z-]+';
$isValid = preg_match('/'.$userPattern.'@'.$domainPattern.'/-', $email);
Alvast bedankt!
Code (php)
1
2
3
4
2
3
4
<?php
if(filter_var('[email protected]', FILTER_VALIDATE_EMAIL))
echo 'dit is een geldig emailadres';
?>
if(filter_var('[email protected]', FILTER_VALIDATE_EMAIL))
echo 'dit is een geldig emailadres';
?>
Maak er trouwens zo'n element van; dan controleert de webbrowser ook mee.
<input type="email" placeholder="e-mail">
Hieronder het volledige script. Het lijkt mij dat ik het - moet plaatsen in het $userPattern gedeelte. Maar heb dat geprobeerd en dat wordt niet gepakt.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
/**
* Utility class for validation
* @author Dual Infinity
*
*/
class ValidationUtility {
/**
* Checks whether an email address is validly formatted
* @param string $email
* @return bool
*/
public static function isValidEmail($email) {
$email = strtolower($email);
$userPattern = '[0-9a-z\\.]+';
$domainPattern = '[0-9a-z\\.]+\\.[a-z-]+';
$isValid = preg_match('/'.$userPattern.'@'.$domainPattern.'/-', $email);
return $isValid;
}
public static function formatPrice ($float, $html = true) {
$currency = ($html) ? '€' : '€';
return str_replace('.', ',', sprintf($currency.' %0.2f', $float));
}
}
?>
/**
* Utility class for validation
* @author Dual Infinity
*
*/
class ValidationUtility {
/**
* Checks whether an email address is validly formatted
* @param string $email
* @return bool
*/
public static function isValidEmail($email) {
$email = strtolower($email);
$userPattern = '[0-9a-z\\.]+';
$domainPattern = '[0-9a-z\\.]+\\.[a-z-]+';
$isValid = preg_match('/'.$userPattern.'@'.$domainPattern.'/-', $email);
return $isValid;
}
public static function formatPrice ($float, $html = true) {
$currency = ($html) ? '€' : '€';
return str_replace('.', ',', sprintf($currency.' %0.2f', $float));
}
}
?>
Filter_var doet alles wat je namelijk wilt.
Gewijzigd op 13/11/2013 11:34:39 door - Ariën -
Bedankt, deze werkt inderdaad. Niet gevoelig voor spam etc?
N van der Peijl op 13/11/2013 11:48:10:
Bedankt, deze werkt inderdaad. Niet gevoelig voor spam etc?
Ik zie geen verband met het valideren van een mailadres en spam. Verder is de validatie prima.
http://php.net/manual/en/function.getmxrr.php staat een ellenlang stuk code wat uitlegt hoe je met SMTP commando's kan controleren of een emailadres bestaat. Let echter wel op dat dit veel server to server verkeer kan veroorzaken (een hacker kan bijvoorbeeld een DDOS aanval doen en een miljoen emailadressen laten controleren. Je hebt dan ook nog eens kans om op een email blacklist te komen).
Je kan ook de functie getmxrr gebruiken om te controleren of een domeinnaam bestaat. In de reacties op de pagina