Question

Je suis en train de faire une requête SQL, mais je dois vérifier en quelque sorte si la valeur est une adresse e-mail. Je besoin d'un moyen de vérifier si $user est une adresse e-mail, parce que j'ai des valeurs de l'utilisateur, comme dans mon tableau.

test
test2
test@example.com
test2@example.com
test392
test@example.net

et ainsi de suite ...

je dois faire si les contrôles $useremail $user pour savoir si c'est une adresse e-mail. Je peux donc actualiser les valeurs, WHERE user=test OR user=test@example.com, etc.

$user = strtolower($olduser);
$useremail = "";

mysql_query("UPDATE _$setprofile SET user=$sn, fc=$fc WHERE user='$user' OR user='$useremail");
Était-ce utile?

La solution

Ce n'est pas une bonne méthode et ne vérifie pas si l'e-mail existe mais il vérifie si elle ressemble à un e-mail avec le @ et l'extension de domaine.

function checkEmail($email) {
   $find1 = strpos($email, '@');
   $find2 = strpos($email, '.');
   return ($find1 !== false && $find2 !== false && $find2 > $find1);
}

$email = 'name@email.com';
if ( checkEmail($email) ) {
   echo $email . ' looks like a valid email address.';
}

Autres conseils

Sans expressions régulières:

<?php
    if(filter_var("some@address.com", FILTER_VALIDATE_EMAIL)) {
        // valid address
    }
    else {
        // invalid address
    }
?>

L'approche la plus simple est d'utiliser une expression régulière pour vérifier les adresses e-mail, bien qu'il y ait un certain désaccord sur la façon dont cela peut être précis. Ce processus est décrit en détail ici:

En utilisant une expression régulière pour valider une adresse e-mail

Vous pouvez utiliser REGEXP dans MySQL pour sélectionner la base de données en fonction de votre expression régulière:

http://dev.mysql.com/doc/refman /5.1/en/regexp.html

if(filter_var($email, FILTER_VALIDATE_EMAIL))
{
    echo 'This is a valid email address.';
    echo filter_var($email, FILTER_VALIDATE_EMAIL);
    //exit("E-mail is not valid");
}
else
{
    echo 'Invalid email address.';
} 

Vous pouvez utiliser des expressions régulières pour valider votre chaîne d'entrée pour voir si elle correspond à une adresse e-mail:

<?php 
$email = "someone@example.com"; 
if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) { 
  echo "Valid email address."; 
} 
else { 
  echo "Invalid email address."; 
} 
?>

De: http://www.totallyphp.co.uk/code/validate_an_email_address_using_regular_expressions.htm

EDIT : pour des expressions plus précises, s'il vous plaît se référer à Travis répondre sur cette question

Cette fonction is_email () vous donnera une réponse définitive à savoir si la chaîne est une adresse e-mail valide ou ne pas. Pour autant que je sache, aucune autre solution le fera avec le même niveau d'autorité.

Si je comprends bien l'exemple correctement, vous l'utiliser comme ceci

$user = strtolower($olduser);
$useremail = (is_email($user)) ? $user : '';

Le PHP fonction intégrée est incomplète. Je suis l'auteur principal is_email() donc je souffle ma trompette, mais je l'ai mis beaucoup de travail dans ce afin que personne d'autre ne devrait avoir à jamais.

Je me sers de cette fonction depuis de nombreuses années à travers des centaines de sites. Il est sans doute pas parfait, mais je ne l'ai jamais eu une plainte de faux négatifs (ou positifs):

function validate_email($email) {
    return (preg_match("/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/", $email) || !preg_match("/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/", $email)) ? false : true;
}

En dehors de toutes les suggestions regex qui la plupart du temps ne supporte pas les tous de son (y compris par exemple .info et de .museum) et la décision à venir de l'ICANN pour permettre chinois et l'arabe dans URL du TLD disponibles (ce qui laisserait [a-z] et \w échec) pour lesquels les éléments suivants regex plus générique est suffisante

([^.@]+)(\.[^.@]+)*@([^.@]+\.)+([^.@]+)

Je mentionne aussi que faire un WHERE user=test OR user=test@example.com est trop sujette aux erreurs. Mieux utiliser un PK autogénérés dans le tableau et l'utiliser dans la clause WHERE.

Je ne vois pas vraiment la valeur de mailregexes strictes, longs et illisibles conformes aux spécifications de RFCxxxx. Le meilleur moyen est encore d'envoyer un mail avec un lien avec une clé d'activation à l'utilisateur final de le laisser confirmer l'adresse mail. Informer que sous la forme aussi bien. Si nécessaire laisser l'utilisateur saisir l'adresse e-mail deux fois comme vous le faites pour les mots de passe.

$user_email = "email@string.com";

function isEmail($user) {
     if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) {
          return true
     } else {
          return false
     }
}

if (isEmail($user_email)) {
     // email is valid, run the query
     mysql_query("UPDATE _$setprofile SET user=$sn, fc=$fc WHERE user='$user' OR user='$user_email");
}

Comme tout le monde affichant leur expression régulière, voici le mien: ^((([\w+-]+)(.[\w+-]+)*)|(\"[^(\|\")]{0,62}\"))@(([a-zA-Z0-9-]+.)+([a-zA-Z0-9]{2,})|[?([1]?\d{1,2}|2[0-4]{1}\d{1}|25[0-5]{1})(.([1]?\d{1,2}|2[0-4]{1}\d{1}|25[0-5]{1})){3}]?)$

Au meilleur de ma connaissance, il prend en charge tout dans la spécification RFC, y compris beaucoup de choses que la plupart des gens ne comprennent généralement pas.

$user_email = "email@gmailcom";

function isEmail($email) {
     if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) {
          return true;
     } else {
          return false;
     }
}

if (isEmail($user_email)) {
     // email is ok!
} else {
     // email not ok
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top