需要正则表达式的校正

时间:2016-03-24 10:26:34

标签: java regex

^(?!(.)\1{2})(?!012|123|234|345|456|567|678|789|987|876|765|654|543|432|321|210)[0-9]{3,}$

我已经制作了上面的正则表达式,并尝试在字符串上实现以下规则,但这个正则表达式在规则1和规则3上失败。它适用于规则2.需要更正

规则#1不允许使用相同的数字。 规则#2不允许使用连续数字。 规则#3不允许三个或更多相同的数字。

2 个答案:

答案 0 :(得分:1)

希望以下模式可以满足您的需求:

^(?!.*(?:(\d).*\1|012|123|234|345|456|567|678|789|987|876|765|654|543|432|321|210))(\d{3,})$

REGEX说明:

^                   # assert start of line
 (?!                # negtive lookahead group starts
    .*              # match any characters except new line
    (?:             # non-capturing group starts
        (\d).*\1|   # RULE#1: Same digits not allowed (e.g. 515, 330); OR 
        012|123|234|345|456|567|678|789|987|876|765|654|543|432|321|210
                    # RULE#2: Sequential digits not allowed (e.g. 567, 765)
    )               # non-capturing group ends
 )                  # negtive lookahead group ends
 (                  # capturing group starts
    \d{3,}          # match three or more digits (This is not RULE#3 )
 )                  # capturing group ends      
$                   # assert end of line

REGEX 101 DEMO.

对正则表达式进行的修改:

  1. 将两个否定前瞻组(?!...)组合成一个。
  2. 从匹配任何字符除了换行符(。)到任何数字(\ d)。
  3. 添加。*到否定前瞻组以匹配排除模式之前的那些字符。
  4. RULE#3由规则#1涵盖。

答案 1 :(得分:0)

如果我理解你的话,两个相同的数字不允许在任何地方 - 而不是并排。正如托马斯评论的那样,这也涵盖了规则#3 ......(?)

尝试:

var iframe = document.getElementById('pltc');
iframe.contentWindow.document.open('text/htmlreplace');
iframe.contentWindow.document.write('<input type="checkbox" name="tc0">Yes<input type="checkbox" name="tc0">N0<br/><br/><br/><br/><input type="checkbox" name="tc1">Yes<input type="checkbox" name="tc1">No ');
iframe.contentWindow.document.close();

//Near checkboxes
$('#pltc input[name="tc0"]').click(function() {
    $(this).siblings('input:checkbox').prop('checked', false);
});

更改了您的第一个负面预测,以检查整个字符串而不仅仅是第一个字符。

也许这至少指出了你正确的方向:)

问候。

修改

如果规则#2也应该应用于整个字符串,则需要对#2进行相同的操作:

^(?!.*?(.).*?\1)(?!012|123|234|345|456|567|678|789|987|876|765|654|543|432|321|210)[0-9]{3,}$