You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift实现含阿拉伯语等RTL语言的多语言邮箱验证咨询

Swift 适配RTL语言的邮箱验证方案

你原来的正则仅覆盖ASCII字符集,要支持阿拉伯语、乌尔都语这类RTL语言的邮箱,核心是把正则里的ASCII字母范围替换成Unicode通用字母属性,同时保留邮箱格式要求的其他合法字符。

调整后的正则表达式

针对你简化的邮箱格式(string@string.string),适配Unicode的正则可以写成:

let validUnicodeEmailPattern = #"[\p{L}0-9\._%+-]+@([\p{L}0-9-]+\.)+[\p{L}]{2,}"#
  • \p{L}:匹配任意Unicode字母(包括阿拉伯语、乌尔都语等所有语言的字母,不管RTL还是LTR)
  • 保留原正则里的数字、本地部分允许的符号(._%+-)、域名部分的连字符(-)和点号(.)
  • 将原正则末尾的{2,4}改为{2,},适配.شبكة这类长度超过4的非英文顶级域名

Swift 验证实现代码

封装成工具函数直接调用:

func isEmailValid(_ email: String) -> Bool {
    let pattern = #"[\p{L}0-9\._%+-]+@([\p{L}0-9-]+\.)+[\p{L}]{2,}"#
    guard let regex = try? NSRegularExpression(pattern: pattern, options: .caseInsensitive) else {
        return false
    }
    let range = NSRange(email.startIndex..., in: email)
    return regex.firstMatch(in: email, range: range) != nil
}

测试示例

验证不同语言的邮箱:

let arabicEmail = "مثال_نموذج@مثال.شبكة"
print(isEmailValid(arabicEmail)) // 输出 true

let urduEmail = "مثال_نمونہ@مثال.کم"
print(isEmailValid(urduEmail)) // 输出 true

let englishEmail = "test+tag@example.com"
print(isEmailValid(englishEmail)) // 输出 true

注意事项

  • Swift的NSRegularExpression默认支持Unicode属性匹配,无需额外开启选项
  • RTL语言的字符串排版方向不影响验证逻辑,正则会正常匹配对应字符
  • 若需严格遵循RFC标准(比如本地部分特殊字符限制、域名IDN规则),可进一步调整正则,当前方案已满足你简化后的格式要求

内容的提问来源于stack exchange,提问作者ShadowMonarch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 09:20:24