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

SSN与9位数字筛选误捕问题:正则表达式优化诉求

Fixing SSN Regex False Positives

Let’s tackle those annoying false matches you’re getting with your current SSN regex patterns. The core issue with your original regexes is that they’re way too broad—using \D (any non-digit) doesn’t distinguish between valid SSN separators and random symbols/letters, and they don’t account for actual SSN formatting rules or proper boundary checks.

Optimized Regex for Standard SSN Format (XXX-XX-XXXX)

First, the standard SSN uses hyphens as separators, not arbitrary non-digits. We’ll add boundary checks to avoid matching parts of longer strings, plus enforce SSN validity rules to filter out invalid number combinations:

(?<!\d)(?!000|666|9\d{2})\d{3}-(?!00)\d{2}-(?!0000)\d{4}(?!\d)

Breaking this down:

  • (?<!\d): Negative lookbehind to ensure the SSN isn’t preceded by a digit (avoids matching middle parts of longer numbers)
  • (?!000|666|9\d{2}): Negative lookahead to exclude invalid SSN area numbers (000, 666, and 900-999 are never used)
  • \d{3}-(?!00)\d{2}-(?!0000)\d{4}: Matches the exact 3-2-4 hyphenated format, excluding invalid group numbers (00) and serial numbers (0000)
  • (?!\d): Negative lookahead to ensure the SSN isn’t followed by a digit

Optimized Regex for 9-Digit SSN (No Separators)

For pure 9-digit SSNs, we need to avoid matching random 9-digit numbers like order IDs. Again, we’ll add boundary checks and SSN validity rules:

(?<!\w)(?!000|666|9\d{2})\d{9}(?!\w)

Breaking this down:

  • (?<!\w): Negative lookbehind to ensure the number isn’t preceded by a letter, digit, or underscore (avoids matching parts of alphanumeric strings like FA300217F0090)
  • (?!000|666|9\d{2}): Same validity check for area numbers as above
  • \d{9}: Matches exactly 9 consecutive digits
  • (?!\w): Negative lookahead to ensure the number isn’t followed by a letter, digit, or underscore

How This Fixes Your False Positives

Let’s go through your problem cases:

  • (xxxx) xxx-xx-xxxx 684072943: If this 9-digit number is an order ID, either it will fail the SSN validity check (e.g., if it starts with 9xx, 000, or 666) or the (?<!\w)/(?!\w) boundaries will ensure it only matches if it’s a standalone number—validity rules still cut down on random matches.
  • FA300217F0090: The mixed alphanumeric structure means the 9-digit regex won’t match—(?<!\w) ensures there’s no letter/digit before the number, which doesn’t hold here (the number is surrounded by letters).
  • Potential Match #1:--------------- nt: ex: 201[[71230 0821]] am ex: 201...: The numbers here are split by spaces/brackets and aren’t a continuous 9-digit string or hyphenated SSN format, so neither regex will pick them up.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 02:28:43