不,這正則表達式是不是適合這個目的。而不是(但我不能保證它的有效性)。
此外,關於腳本本身,你爲什麼不檢查是這樣的:
function checkEmailValidity(e) {
return e.match("some validating regex");
}
這似乎是一個更快,更consise和更具可讀性的解決方案。
編輯:
值得一提的,這幾乎是不可能的編寫一個正則表達式,可以檢測到任何有效的電子郵件地址。因此,您可能會更好地嘗試製作一些驗證算法,而不是正則表達式,因爲有效的電子郵件地址可能非常非常複雜。
考慮以下代碼:
function validateEmail(email) {
if (typeof email != "string") return false;
email = email.split("@");
email[1] = email[1].split(".");
if (
email.length !== 2 ||
email[1].length < 2 ||
!email[1].hasValues(String)
) return false;
return true;
}
// Checks whether each key in an array has a value, and (optionally) if they match a given contructor (object type).
// I.e.: myArray.hasValues(String) // checks whether all elements in myArray has a value, a nonempty string.
Array.prototype.hasValues = function(assumedConstructor) {
for (var i = 0; i < this.length; i++) {
if (!this[i]) return false;
if (assumedConstructor && this[i].constructor != assumedConstructor) return false;
}
return true;
};
它的工作原理是這樣的:
- 首先檢查是否字符串包含一個
@
,且只有一個
- 檢查該
@
後的部分在至少有一個.
- 檢查每個可能的之間是否有一些字符10歲。
它仍然會很容易僞造一個假的電子郵件地址,但這樣一來,我們確保它至少莫名其妙格式正確。我能想到的唯一問題是@
的內部註釋,根據RFC的說法,這應該是完全合法的,但是這段代碼將它視爲錯誤。
正常的互聯網用戶,其中有正常的電子郵件地址,不會失敗。所以它的實際重要性取決於你自己決定;)
最好的解決方案,如果有的話,就是把地址放入一些內置的方法,以某種方式通過嘗試使用電子郵件來檢查有效性地址。
基本上,這個問題的答案應該學習你兩件事情: 1)許多人不以爲然如何實現它 2)的解決方案,似乎什麼東西無處不異常複雜.. 。這可能意味着電子郵件地址的規範已被破壞:) – 2010-05-06 20:34:45