
Rileggendo il mio post precedente sulla validazione email tramite javascript e considerando il fatto che non sono riuscito a trovare una funzione equivalente in PHP, ho pensato di convertire la funzione io stesso.
I passaggi sono stati pochi, poiché le espressioni regolari non cambiano più di tanto tra javascript e perl.
Tutto è nato osservando la funzione di verifica delle email di CodeIgniter, la quale non considera le specifiche RFC riguardo alle email.
Alla mia segnalazione del problema nel forum di CodeIgniter la loro risposta è stata: “La nostra validazione funziona nel 90% dei casi”. Ok, sarà vero, ma in futuro?
Sempre più gente possiede un sito web personale ed in futuro ci potrebbero essere molte più persone con indirizzi email “strani”. Quindi perché non mettere le mani avanti?
Codifica in PHP
12 | function emailCheck( $emailStr ){ |
13 | $emailPat = '/^(.+)@(.+)$/' ; |
14 | $specialChars = '\\(\\)<>@,;:\\\\\\\"\\.\\[\\]' ; |
15 | $validChars = '[^\\s' . $specialChars . ']' ; |
16 | $quotedUser = '("[^"]*")' ; |
17 | $ipDomainPat = '/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/' ; |
18 | $atom = $validChars . '+' ; |
19 | $word = '(' . $atom . '|' . $quotedUser . ')' ; |
20 | $userPat = '/^' . $word . '(\\.' . $word . ')*$/' ; |
21 | $domainPat = '/^' . $atom . '(\\.' . $atom . ')*$/' ; |
23 | if (! preg_match( $emailPat , $emailStr , $matchArray )) { |
24 | echo 'L\'email sembra essere sbagliata: (controlla @ e .)' ; |
28 | $user = $matchArray [1]; |
29 | $domain = $matchArray [2]; |
31 | if (! preg_match( $userPat , $user )) { |
32 | echo 'La parte dell\'email prima di "@" non sembra essere valida!' ; |
35 | if (preg_match( $ipDomainPat , $domain , $IPArray )){ |
36 | for ( $i = 1; $i <= 4; $i ++) { |
37 | if ( $IPArray [ $i ] > 255) { |
38 | echo 'L\'IP di destinazione non è valido!' ; |
45 | if (! preg_match( $domainPat , $domain , $domainArray )){ |
46 | echo 'La parte dell\'email dopo "@" non sembra essere valida!' ; |
50 | $atomPat = '/' . $atom . '/' ; |
52 | if (preg_match_all( $atomPat , $domain , $domArr )){ |
54 | $len = count ( $domArr ); |
55 | $firstDoaminLevel = strlen ( $domArr [ $len - 1]); |
56 | if ( ( $firstDoaminLevel < 2) || ( $firstDoaminLevel > 6) ) { |
57 | echo 'Il dominio di primo livello (es: .com e .it) non sembra essere valido!' ; |
61 | echo 'L\'indirizzo manca del dominio!' ; |
La codifica per CodeIgniter la trovate in un mio post sul loro forum
bell’articolo