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

如何使用Swift验证格式为123-45-6789的美国社会安全号码(SSN)?

如何用Swift验证美国社会安全号码(SSN)格式(123-45-6789)

在Swift里验证字符串是否符合美国SSN的标准格式(XXX-XX-XXXX),用正则表达式是最直接高效的方式,毕竟格式规则非常明确。我给你整理两种方案,按需选择:

方案1:仅验证格式匹配

如果你只需要检查字符串是否严格遵循123-45-6789的结构(3位数字-2位数字-4位数字),可以给String加一个扩展属性,用简单的正则表达式来匹配:

extension String {
    var isValidSSNFormat: Bool {
        // 先去除前后可能的空格,处理用户输入失误的情况
        let trimmedString = self.trimmingCharacters(in: .whitespacesAndNewlines)
        // 正则表达式:开头到结尾必须是 3数字-2数字-4数字
        let ssnPattern = #"^\d{3}-\d{2}-\d{4}$"#
        let predicate = NSPredicate(format: "SELF MATCHES %@", ssnPattern)
        return predicate.evaluate(with: trimmedString)
    }
}

使用示例:

let validSSN = "123-45-6789"
print(validSSN.isValidSSNFormat) // 输出 true

let invalidWithoutDashes = "123456789"
print(invalidWithoutDashes.isValidSSNFormat) // 输出 false

let invalidWrongStructure = "12-345-6789"
print(invalidWrongStructure.isValidSSNFormat) // 输出 false

let invalidWithLetters = "abc-45-6789"
print(invalidWithLetters.isValidSSNFormat) // 输出 false

方案2:更严格的SSN规则验证

真实的SSN除了格式要求,还有一些数字组合是无效的(比如前3位不能是000、666,中间两位不能是00,最后4位不能是0000等)。如果需要验证这些规则,可以用更严谨的正则表达式:

extension String {
    var isValidSSN: Bool {
        let trimmedString = self.trimmingCharacters(in: .whitespacesAndNewlines)
        // 正则解释:
        // ^(?!000|666)[0-8]\d{2}:前3位不能是000/666,且第一位不能是9
        // -(?!00)\d{2}:中间两位不能是00
        // -(?!0000)\d{4}$:最后4位不能是0000
        let strictSSNPattern = #"^(?!000|666)[0-8]\d{2}-(?!00)\d{2}-(?!0000)\d{4}$"#
        let predicate = NSPredicate(format: "SELF MATCHES %@", strictSSNPattern)
        return predicate.evaluate(with: trimmedString)
    }
}

使用示例:

let invalidSSN1 = "000-45-6789" // 前3位是000
print(invalidSSN1.isValidSSN) // 输出 false

let invalidSSN2 = "123-00-6789" // 中间两位是00
print(invalidSSN2.isValidSSN) // 输出 false

let validStrictSSN = "123-45-6789"
print(validStrictSSN.isValidSSN) // 输出 true

小提示

  • 如果你不需要处理前后空格,可以去掉trimmingCharacters那一行,完全严格匹配输入字符串。
  • 正则表达式里的\d等价于[0-9],用来匹配数字字符。
  • NSPredicate的SELF MATCHES会检查整个字符串是否完全符合正则规则,不会出现部分匹配的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:28:40