Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式根据第一个位置的值匹配第三个位置_Java_Regex_Validation_Numbers - Fatal编程技术网

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

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]

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

我不知道你如何在一个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似乎是一个有效的数字

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