Java 正则表达式根据第一个位置的值匹配第三个位置
目前,我正在尝试在Salesforce的验证规则中获得以下条件的匹配项 -如果数字以2或9以外的任何数字开头,则第三个位置的数字必须是2 -数字必须正好有9位数字 -不允许重复相同的数字 这是我的代码,分为三个表达式,因为我不确定是否只能在一个表达式中得到相同的结果 我复制的代码语法正确,但不匹配Java 正则表达式根据第一个位置的值匹配第三个位置,java,regex,validation,numbers,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]
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}")
)
我不知道你如何在一个reg ex中做到这一点,但你可以有两个并匹配其中任何一个:
// 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},因为它们是可选的 这会让你接受重复数字的一切
REGEX(Phone, "([01345678](?=\\d2)\\d{8})|([29]\\d{8})");
对正则表达式的一些解释:
()()“中间的条表示”或“所以第一个圆括号”或“第二个词条
” (=\d2)是一种前瞻性的方法 如果你把它和这里的答案结合起来 你可以做另一个regex语句\d{3}(?!.*(.).*\1)\d{6}$
这样,您可以检查并确保前3个数字之后没有重复的数字,因为202345678似乎是一个有效的数字哪个示例不匹配,哪个匹配?