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

如何用单个正则表达式依次实现空格移除与年份截断功能?

解决方案:分两步正则替换(优先推荐)

你遇到的问题核心是需要先清理空格,再处理年份截断,用|组合正则只会匹配其中一种情况,无法按顺序执行。最可靠的方式是连续执行两次正则替换,大部分编程语言、表单验证工具都支持这个操作:

第一步:移除所有空格

使用全局匹配的正则 \s(比如在JS里是/\s/g),将所有空格替换为空字符串。

  • 示例输入:3088143101 1975 → 处理后:30881431011975
  • 示例输入:308 814 3101 75 → 处理后:308814310175

第二步:处理年份截断

使用正则 ^(\d{10})(19|20)(\d{2})$,替换为 $1$3:

  • 对于14位的纯数字(含完整年份):30881431011975 → 替换后:308814310175(忽略第11-12位的19,保留年份后两位75)
  • 对于已经符合要求的12位纯数字:308814310175 → 正则不匹配,结果保持不变

备选方案:单次正则替换(仅当无法执行两次替换时使用)

如果你的环境只能设置一个正则替换规则,可以使用以下组合正则覆盖带空格的两种输入场景:
正则表达式:

^\s*(\d{10})(?:(19|20)\s*(\d{2})|(\d{2}))\s*$

替换为:$1$3$4

规则解释

  • ^\s* 和 \s*$:匹配字符串首尾的任意空格
  • (\d{10}):捕获核心的前10位数字(最终结果的前10位)
  • (?:(19|20)\s*(\d{2})|(\d{2})):非捕获组,匹配两种合法输入:
    1. 完整年份格式:(19|20)\s*(\d{2}) → 捕获年份后两位到分组3
    2. 直接年份后两位格式:(\d{2}) → 捕获这两位到分组4
  • 替换时$1$3$4:自动取对应分组的内容,不管是哪种输入格式,最终都会得到12位合法密码

注意:这个方案仅适用于空格不在前10位数字中间的场景(比如3088143101 1975可以处理,但3 088143101 1975无法匹配),所以优先推荐两次替换的方案。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 08:15:35