我有以下的,我喜歡用它來驗證電子郵件地址的正則表達式模式:不正確的結果與JavaScript的
^[a-zA-Z0-9!#\$%&'\*\+\-\/=\?\^_`\{\|\}~\.][email protected][a-zA-Z0-9-_]+\.[a-zA-Z0-9-.]+[a-zA-Z0-9]$
它適用於用戶輸入是相當寬容的,因爲它將使一些無效的邊緣案例會抓住大多數錯誤。
我一直在C#應用程序中使用這個適合年齡的問題。下面是一個簡單的C#腳本,顯示它很樂意的工作:
string pattern = @"^[a-zA-Z0-9!#\$%&'\*\+\-\/=\?\^_`\{\|\}~\.][email protected][a-zA-Z0-9-_]+\.[a-zA-Z0-9-.]+[a-zA-Z0-9]$";
string[] data = new string[] {
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]",
"[email protected]_123.museum",
"o'[email protected]",
"[email protected]",
"[email protected]@bar.com",
"@bar.com",
"foo.com",
"[email protected]",
"[email protected]"
};
foreach (string email in data)
{
bool valid = Regex.IsMatch(email, pattern);
string state = valid ? "pass" : "fail";
Console.WriteLine($"{state}: {email}");
}
這個小腳本給出了下面的輸出,並且是完全一樣的,我期望:
pass: [email protected]
pass: [email protected]
pass: [email protected]
pass: [email protected]
pass: [email protected]_123.museum
pass: o'[email protected]
fail: [email protected]
fail: [email protected]@bar.com
fail: @bar.com
fail: foo.com
fail: [email protected]
fail: [email protected]
我現在需要驗證電子郵件JavaScript中的客戶端地址。當我在JS中嘗試相同的東西時,我得到的結果稍有不同!這裏是我的方案的JS以上版本:
var pattern = "^[a-zA-Z0-9!#\$%&'\*\+\-\/=\?\^_`\{\|\}~\.][email protected][a-zA-Z0-9-_]+\.[a-zA-Z0-9-.]+[a-zA-Z0-9]$";
var data = [
/* the same list of emails as above */
];
for (var i = 0; i < data.length; i++) {
var valid = new RegExp(pattern).test(data[i]);
var state = valid ? "pass" : "fail";
console.log(state + ": " + data[i]);
}
這一次,我得到以下輸出:
pass: [email protected]
pass: [email protected]
pass: [email protected]
pass: [email protected]
pass: [email protected]_123.museum
pass: o'[email protected]
pass: [email protected] <- this should fail
pass: [email protected]@bar.com <- and this!
fail: @bar.com
fail: foo.com
fail: [email protected]
fail: [email protected]
注意中間的兩道即是在C#版本失敗!爲了確認我的正則表達式模式是否正確,我使用了regex101.com出色的單元測試功能來檢查它,點擊here查看我的測試/結果。請注意,我故意將其設置錯誤(所有測試'預期'匹配),所以它突出顯示無效的電子郵件地址。這裏的任何方式都是結果的圖片,你可以看到與我使用C#的結果相匹配。
如果有人可以指出我要去的地方錯了,我將不勝感激!
Wiktor的 - 我去來回。但如果你有相同的看法,很酷。 –
Wiktor這可能會得到相同的答案,但我不明白它是如何「完全重複」。 – Ben
Ben - 這是SO的「完全重複」的定義。 (「確切的重複」這個詞應該被廢棄。)定義是:這個問題的答案回答了這個問題。請注意,重複並不一定是壞事:它們增加了搜索表面,導致更多人找到一組規範的,有時候策劃的答案。 –