gpt4 book ai didi

javascript - 正则表达式检查具有一系列模式的数字

转载 作者:行者123 更新时间:2023-11-30 13:14:08 24 4
gpt4 key购买 nike

我有一个条件,我需要使用 javascript 省略具有以下模式的一系列数字。

如果是4位数字

  1. 只有数字和长度应该是 4
  2. 至少 3 个不同的数字(例如:不允许的数字:1113、4443)
  3. 在升序和降序序列的情况下都没有 3 个连续数字(例如:不允许的数字:1231、4321)

如果是5-6位数字

  1. 只有数字和长度应该是 5-6
  2. 至少 4 个不同的数字(例如:不允许的数字:11113、44443)
  3. 在升序和降序系列的情况下都没有 3 个连续数字(例如:不允许的数字:12341、43211)

据我所知,你不能检查升序和降序数字,你只能听他们喜欢

如果是4位

^[0-9]{4}$ AND NOT IN
(?:012|210|123|321|234|432|345|543|456|654|567|765|678|876|789|987|111|222|333|444)

如果是5-6位

^[0-9]{5,6}$ AND NOT IN
(?:0123|3210|1234|4321|2345|5432|3456|6543|4567|7654|5678|8765|6789|9876|1111|2222|3333|4444|5555|6666)

我不知道如何在正则表达式中填写“AND NOT IN”。有没有更好的办法?

最佳答案

这种事情对于正则表达式来说似乎太复杂了,因为即使你会写它,如果没有一堆注释你能理解吗?

相反,尝试将其分解:

// assuming var number as string;
var i, l = number.length, prev = -999, dist, prevdist = 0,
digits = [0,0,0,0,0,0,0,0,0,0], dcnt = 0;
main:
switch(l) {
case 4:
case 5:
case 6:
for( i=0; i<l; i++) {
digits[number[i]]++;
dist = prev-number[i];
if( prevdist == dist && Math.abs(dist) == 1) {
alert("Three consecutive digits ("+number.substr(i-2,3)+")");
break main;
}
prev = number[i];
prevdist = dist;
}
for( i=0; i<10; i++) {
if( digits[i]) dcnt++;
}
if( dcnt < (l == 4 ? 3 : 4)) {
alert("Need at least "+(l == 4 ? 3 : 4)+" distinct digits");
break main;
}
alert("Valid");
break main;
default:
alert("Length must be between 3 and 5");
break main;
}

关于javascript - 正则表达式检查具有一系列模式的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12749631/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com