正则表达式根据第一个位置的值匹配第三个位置

时间:2019-01-11 20:52:55

标签: java regex validation numbers

当前,我尝试在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}")
)

2 个答案:

答案 0 :(得分:1)

这将使您一切都可以重复数字。

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

对正则表达式的一些解释:

“()|()”中间的小节表示'OR',因此第一个括号将'OR'括在第二个括号中

(?= \ d2)是前瞻

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

您可以发表另一个正则表达式声明

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

那样,您可以检查并确保在前3个数字之后没有重复项,因为看起来202345678是有效数字

答案 1 :(得分:0)

我不知道您如何在单个正则表达式中做到这一点,但是您可以拥有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},因为它们是可选的。