61 lines
1.4 KiB
TypeScript
61 lines
1.4 KiB
TypeScript
// Email 驗證工具
|
||
export function isValidEmail(email: string): boolean {
|
||
if (!email) return true // 空值是允許的(可選欄位)
|
||
|
||
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
|
||
return emailRegex.test(email)
|
||
}
|
||
|
||
export function sanitizeEmail(email: string): string {
|
||
return email.trim().toLowerCase()
|
||
}
|
||
|
||
export function getEmailDomain(email: string): string {
|
||
const parts = email.split("@")
|
||
return parts.length > 1 ? parts[1] : ""
|
||
}
|
||
|
||
// 檢查是否為常見的臨時郵箱服務
|
||
const temporaryEmailDomains = [
|
||
"10minutemail.com",
|
||
"guerrillamail.com",
|
||
"mailinator.com",
|
||
"tempmail.org",
|
||
"throwaway.email",
|
||
]
|
||
|
||
export function isTemporaryEmail(email: string): boolean {
|
||
if (!email) return false
|
||
|
||
const domain = getEmailDomain(email)
|
||
return temporaryEmailDomains.includes(domain)
|
||
}
|
||
|
||
export function validateEmailForSubmission(email: string): {
|
||
isValid: boolean
|
||
message?: string
|
||
suggestion?: string
|
||
} {
|
||
if (!email) {
|
||
return { isValid: true } // 空值允許
|
||
}
|
||
|
||
if (!isValidEmail(email)) {
|
||
return {
|
||
isValid: false,
|
||
message: "請輸入有效的 Email 格式",
|
||
suggestion: "例如:your.name@company.com",
|
||
}
|
||
}
|
||
|
||
if (isTemporaryEmail(email)) {
|
||
return {
|
||
isValid: false,
|
||
message: "請避免使用臨時郵箱服務",
|
||
suggestion: "建議使用常用的 Email 地址,以便我們能夠聯繫到你",
|
||
}
|
||
}
|
||
|
||
return { isValid: true }
|
||
}
|