私は電子メールアドレスを検証しようとしていますが、ユーザーに検証メールを送信することでこれをバックアップするつもりであるため、可能な限り寛大な検証が必要です (これは多く聞かれることを認識していますが、他の質問はできるだけ厳密であることに焦点を当てています)可能な限り最も緩いチェックを特定しようとしています)。
メールアドレスではない可能性があるものを削除するために、ある程度の検証を行うことが重要だと今でも考えています...メール"this is not @n email. fool"
のふりをしてデータベースにこっそり座ってほしくありません。私は非常に満足していますが"this.is.not.an.email@fool.com"
。
これまでの私の機能は次のとおりです。
function validate(email) {
var atIndex = email.lastIndexOf('@');
// Make sure email contains an '@' character and that it is neither the first or last character
if (atIndex > 0 && atIndex < email.length -1) {
// Everything before the last '@' character
var local = email.substring(0, atIndex);
// Everything after the last '@' character
var domain = email.substring(atIndex + 1, email.length);
var dotIndex = domain.lastIndexOf('.');
// Make sure domain contains a '.' character and that it is neither the first or last character
if (dotIndex > 0 && dotIndex < domain.length - 1) {
// Array of strings that aren't allowed to appear in a domain
var domainRestrictions = [
"..",
" "
];
var i = domainRestrictions.length;
while (i-- > -1) {
if (domain.indexOf(domainRestrictions[i]) > -1) {
return false;
}
}
// Array of strings that the local portion can neither start or end with
var localRestrictions = [
".",
" "
];
i = localRestrictions.length;
while (i-- > -1) {
var string = localRestrictions[i];
if (local.indexOf(string) == 0 || local.lastIndexOf(string) == local.length - 1) {
return false;
}
}
return true;
}
}
return false;
}
現在、私は以下を禁止しています。
- 「@」記号のないもの。
- 「.」を含まないドメイン またはそれを最初または最後の文字として含むもの。
- 空白または「..」を含む任意のドメイン 「.」で開始または終了する任意のローカル セクション または空白
それ以外はすべて有効と見なされ、引き継がれます。
私の質問は、これが詰まる有効な電子メールアドレスはありますか? 電子メール アドレスに含めることができない、より安全な仮定はありますか?