La risposta è sempre la stessa: una pagina PHP che riceva in input un indirizzo email, e produca in output true se l'indirizzo è valido, false altrimenti, eventualmente con un'indicazione del perché non è valido.
Hai già tutte le componenti che ti servono.
Se posso, evito di fornire un codice da copiare ed incollare, ma qui mi sembra non si stiano facendo grossi progressi, dunque:
email_check.php:
Codice PHP:
header('Content-Type: application/json');
/**
* Returns domain of an email address.
* Returns an empty string if email address is invalid or missing.
* @param string $address Email address
* @return string Domain of email address
*/
function get_domain($address) {
if (filter_var($address, FILTER_VALIDATE_EMAIL) === false) {
return "";
}
return array_pop(explode('@', $address));
}
/**
* Tells whether a domain is blacklisted.
* @param string $domain Domain to check
* @return bool True if and only if domain is blacklisted, false otherwise
*/
function in_blacklist($domain) {
global $blacklist;
return in_array($domain, $blacklist);
}
/**
* Generates a JSON encoded report.
* Produces a JSON object: {"valid": bool, "error": int, "message": string}.
* @param bool $valid Tells whether email address is valid
* @param int $error Error code
* @param string $message Error message
* @return string JSON encoded object
*/
function report($valid = true, $error = 0, $message = "") {
$result = array(
"valid" => $valid,
"error" => $error,
"message" => $message
);
return json_encode($result);
}
// Stops if no address is given
if (!isset($_GET['address'])) {
echo report(false, 1, "No address");
return;
}
$address = $_GET['address'];
$domain = get_domain($address);
// Stops if address is empty
if (empty($address)) {
echo report(false, 2, "Empty address");
return;
}
// Stops if address is invalid
if (filter_var($address, FILTER_VALIDATE_EMAIL) === false) {
echo report(false, 3, "Invalid address");
return;
}
// Stops if domain is blacklisted
if (empty($domain) || in_blacklist($domain)) {
echo report(false, 4, "Blacklisted domain");
return;
}
// Address is valid
echo report(true);
I commenti sono auto-esplicativi. La pagina riceve in input un indirizzo address, tramite GET, effettua i controlli del caso e restituisce un JSON contenente i campi valid (booleano), error (eventuale codice d'errore, intero) e message (eventuale messaggio d'errore, stringa).
Il codice JavaScript, usando jQuery:
Codice:
/**
* Performs an asynchronous request to validate email.
* @param string address Email address
* @param callable callback Callback function
*/
function check_email(address, callback) {
$.get("email_check.php", { "address": address }, callback);
}
/**
* Use your own callback function.
* @param object report Report in the form: {"valid": bool, "error": int, "message": string}.
*/
function my_callback(report) {
var messages = [
"OK",
"Nessun indirizzo trovato",
"Inserire l'email",
"L'indirizzo nonè valido",
"Il dominio non è valido"
];
// What to do when address is valid?
if (report.valid) {
alert("email is valid");
}
// What to do when address is not valid?
else {
alert("email is not valid: " + messages[report.error]);
}
}
...
var address = ...
check_email(address, my_callback);
...
Devi modificare tu la funzione di callback, inserendo nel ramo if il codice da eseguire quando l'indirizzo è valido, e nel ramo else il codice da eseguire quando l'indirizzo non è valido (ad esempio mostrare da qualche parte un messaggio d'errore).
Fatto questo, devi solo invocare la funzione check_email passandole l'indirizzo da controllare e la funzione di callback.
Questi ultimi sono aspetti che non posso implementare io, perché non ho idea né di come sia strutturata la pagina, né di come intendi ottenere gli effetti desiderati (classi CSS? Modificando gli attributi di stile con JavaScript?).