新增資料庫架構
This commit is contained in:
60
lib/email-validation.ts
Normal file
60
lib/email-validation.ts
Normal file
@@ -0,0 +1,60 @@
|
||||
// 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 }
|
||||
}
|
Reference in New Issue
Block a user