【问题标题】:Regex to match 3rd position based on the value of the first position正则表达式根据第一个位置的值匹配第三个位置
【发布时间】:2019-01-11 20:52:54
【问题描述】:

目前,我尝试在 Salesforce 的验证规则中根据以下条件获得匹配 - 如果数字以除 2 或 9 以外的任何数字开头,则第三位的数字必须是 2 - 号码必须正好有 9 位数字 - 不允许重复相同的号码

这是我的代码,分为三个表达式,因为我不确定我是否可以只在一个表达式中得到相同的结果。

我复制的代码语法没问题,但匹配不正确

OR( NOT(REGEX(Phone, "[0-9]{9}")),
REGEX(Phone, "([0-9])\\1{8}"),
REGEX(Phone, "\\b[0,1,3,4,5,6,7,8]{1}[0-9]{1}[0,1,3,4,5,6,7,8,9]{1}")
)

【问题讨论】:

  • 哪个示例不匹配,哪个示例不匹配?

标签: java regex validation numbers


【解决方案1】:

这会让你接受所有的重复数字。

REGEX(Phone, "([01345678](?=\\d2)\\d{8})|([29]\\d{8})");

正则表达式的一些解释:

"()|()" 中间的条表示“或”,所以第一个括号是“或”第二个

(?=\d2) 是向前看

如果您将其与此处找到的答案结合起来 regex to find numbers with unique digits

你可以再做一个正则表达式

\d{3}(?!.*(.).*\1)\d{6}$ 

这样您可以检查并确保前 3 个数字之后没有重复,因为 202345678 似乎是一个有效数字

【讨论】:

    【解决方案2】:

    我不知道你如何在一个 reg-ex 中做到这一点,但你可以有 2 个并匹配它们中的任何一个:

    // If it starts with anything but a 2 or 9, 3rd digit must be a 2
    [013456780][0-9]2[0-9]{6}  OR
    // if it starts with a 2 or 9, rest of the digits can be anything
    [29][0-9]{8}
    

    匹配单个字符是默认设置,因此我省略了 {1},因为它们是可选的。

    【讨论】:

      猜你喜欢
      • 2011-12-04
      • 1970-01-01
      • 2014-09-10
      • 1970-01-01
      • 1970-01-01
      • 2021-04-27
      • 2017-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多