Controllo campi per le e-mail

Ciao.

Ho necessità di controllare se in un form è inserito un indirizzo di mail corretto.

A parte l'ovvio controllo del carattere @, mi interessa andare a vedere se negli ultimi quattro caratteri dell'indirizzo inserito nel form compaia il . (punto).

Do per scontato (credo sia giusto) che gli indirizzi e-mail nel mondo abbiano una estensione di massimo tre caratteri, quindi prendo gli ultimi quattro caratteri a partire da destra dell'indirizzo e indago se è stato correttamente inserito il carattere . (punto) e non per sbaglio una virgola o quant'altro.

<?php
$indirizzo = "esempio@indirizzzodiesempio.it";
$ultime_quattro = substr($indirizzo, -4);    // mi restituisce la sequenza di caratteri o.it


if (eregi(".", $ultime_quattro)){
echo "ok, esiste il punto";
}
else
{
  echo "attenzione, punto mancante";
}
?>

il problema è il carattere punto, php lo interpreta come operatore di concatenazione e lo script, pur non andando in errore, risulta scorretto restituendomi sempre VERO.

Ho provato a usare strval() ma i risultati sono identici.

Come posso far considerare il . (punto) dell'indirizzo per quello che è? Cioè un punto dell'indirizzo mail e non l'operatore di concatenazione? Ho provato con i back slash ma niente ...

Un grazie a tutti

Stone

 :bye:

inviato 10 anni fa
stone
X 0 X
il problema è il carattere punto, php lo interpreta come operatore di concatenazione e lo script, pur non andando in errore, risulta scorretto restituendomi sempre VERO.

Non c'è che dire ti sei ingegnato.

Il problema tuttavia non è questo, un punto come quello nel tuo script non è operatore di concatenazione ma un metacarattere dell'espressione regolare che indica un qualsiasi carattere escluso un a capo.

In altre parole stai chiedendo a php di controllare se nella stringa in questione ci sia un qualsiasi carattere...cosa vuoi che ti risponda? :coolsmiley:

Fai tutto con un'unica espressione regolare in questo modo:

function controllaEmail ($email)  {
  return (ereg ("^[a-zA-Z0-9\._-]+@[a-zA-Z0-9\._-]+\.[a-z]{2,4}%body%quot;, $email))?true :false;
}

Passi come parametro un indirizzo e-mail, true se il formato è corretto, false in caso contrario. Come puoi notare farai un controllo notevolmente più accurato e snello.

Qualcuno ti posterà forse un esempio con preg_match()...scegli quello perché lo stesso manuale in linea consiglia preg_match() come alternativa migliore a ereg ().

Io ho solo questo esempio sottomano e sono piuttosto stanco. :buck:

 :bye:

Ah dimenticavo per vedere se un un punto è contenuto in una stringa non usare un'espressione regolare:

Suggerimento: Non utilizzare la funzione preg_match() se si desidera controllare se una stringa è contenuta in un'altra. Piuttosto utilizzare strpos() oppure strstr() che sono più veloci.

risposto 10 anni fa
usecram
modificato 10 anni fa
X 0 X

Acc...ho fatto una modifica al post e si è corrotto il codice php questo è quello giusto:

function controllaEmail ($email)  {
  return (ereg ("^[a-zA-Z0-9\._-]+@[a-zA-Z0-9\._-]+\.[a-z]{2,4}$", $email))?true :false;
}
risposto 10 anni fa
usecram
X 0 X

Grandioso, funziona perfettamente!!!

Dovrò approfondire l'uso delle espressioni regolari ... :-[

Mi sono solo permesso di cambiare qualcosa per adattare il codice alle mie esigenze, ma il grosso fondamentale è rimasto!!! ;)

$email =  "esempio@indirizzo_di_esempio.it";
if (ereg ("^[a-zA-Z0-9\._-]+@[a-zA-Z0-9\._-]+\.[a-z]{2,4}$", $email)){
echo "ok, l'indirizzo $email inserito risulta corretto'!!!";
}
else
{
echo "sorry!";
}

Ti ringrazio tantissimo!  :)

Ciao  :bye:

Stone

risposto 10 anni fa
stone
X 0 X

Ah stone, il top level domain, non è di massimo 3 caratteri, ma di infiniti caratteri, fino al completamento dello spazio utile.

.info e .name hanno 4 acaratteri ;)

risposto 10 anni fa
Marco Grazia
X 0 X

Un semplice sito lo trovi qui:

http://fido.altervista.org/RegExp/regex.html

risposto 10 anni fa
php
php
6
X 0 X

thanks  :)

risposto 10 anni fa
stone
X 0 X

questa è la funzione che usa Joomla per controllare le email:

function is_email($email)
{
   return preg_match("/[\w\.\-]+@\w+[\w\.\-]*?\.\w{1,4}/", $email);
}

notate che il controllo costringe il top level domain ad essere non più lungo di 4 caratteri

Il meta carattere . viene considerato un semplice carattere punto facendolo precedere da uno \

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Grzie Gianni.

Stone  :bye:

risposto 10 anni fa
stone
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda