using UnityEngine; using UnityEngine.UI; using System.Text.RegularExpressions; [RequireComponent(typeof(InputField))] public class EmailValidator : MonoBehaviour { public GameObject Indicator; // ex: T_Indicator (optionnel) public Color ValidColor = Color.white; public Color InvalidColor = new Color(1f, 0.8f, 0.8f); InputField input; // Regex simple & fiable pour email static readonly Regex EmailRegex = new Regex(@"^[^@\s]+@[^@\s]+\.[^@\s]+$", RegexOptions.IgnoreCase); void Awake() { input = GetComponent(); input.onValueChanged.AddListener(OnValueChanged); input.onEndEdit.AddListener(OnEndEdit); } void OnDestroy() { input.onValueChanged.RemoveListener(OnValueChanged); input.onEndEdit.RemoveListener(OnEndEdit); } void OnValueChanged(string value) { Validate(value, false); } void OnEndEdit(string value) { Validate(value, true); } void Validate(string value, bool finalCheck) { value = Clean(value); bool valid = EmailRegex.IsMatch(value); // Couleur visuelle var colors = input.colors; colors.normalColor = valid ? ValidColor : InvalidColor; input.colors = colors; // Indicateur UI if (Indicator != null) Indicator.SetActive(!valid && finalCheck); // Stockage normalisé if (valid && finalCheck) input.text = value; } string Clean(string s) { if (string.IsNullOrEmpty(s)) return ""; return s.Replace("\u200B", "").Trim().ToLowerInvariant(); } // Pour appel externe (ex: CheckAllInput) public bool IsValid() { return EmailRegex.IsMatch(Clean(input.text)); } }