[英]Create a regex for create a clean array from a list, filter it based on a length of each number and check its validity(whether length is less that 4)
如何获得执行所有这些操作并返回 boolean 值作为答案的正则表达式。
1:获取由任何分隔符(空格或任何非数字字符)分隔的数字,2:去除该数组中小于 5 位的所有数字并创建新数组 3:给出 boolean 新数组是否少于 4 个元素的结果(确定它是否有效)。
const goodlist = "111,256 323| 78987 & 65434 727272727"; // should be good
const badlist = "111256333 323666666a| 78987333333 & 6543 727272727";
let numberPattern = /\d+/g;
let numbersArr1 = goodlist.match(numberPattern);
let filArr1 = numbersArr1.filter((w) => w.length > 4);
let numbersArr2 = badlist.match(numberPattern);
let filArr2 = numbersArr2.filter((w) => w.length > 4);
console.log(numbersArr1, numbersArr2);
const isGoodListOK = filArr1.length < 4;
const isBadListOK = filArr2.length < 4;
document.getElementById("app").innerHTML = `
<div>Input string: ${goodlist}</div>
<br/>
<div>Formatted input: ${numbersArr1} : Filtered Array: ${filArr1}</div>
div>is this list ok: ${isGoodListOK}</div>
<br/>
<br/>
<br/>
<br/>
<div>Input string: ${badlist}</div>
<br/>
<div>Formatted input: ${numbersArr2} : Filtered Array: ${filArr2}</div>
<div>is this list ok: ${isBadListOK}</div>
我用 javscript 完成了这一切,但想要一个正则表达式
https://codesandbox.io/s/simple-regex-to-check-date-format-forked-l1c6pl?file=/src/index.js
您可能会使用一个断言不是 4 次 4 或更多数字的单一模式,然后至少匹配一次出现。
^(?!(?:.*?\b\d{4,}\b){4}).*?\b\d{4,}\b
解释
^
字符串开头(?!
负前瞻
(?:
非捕获组.*?
匹配任意字符,尽可能少\b\d{4,}\b
然后匹配单词边界之间的 4 个或更多数字){4}
关闭非捕获组并重复 4 次)
关闭前瞻.*?\b\d{4,}\b
在单词边界之间匹配至少 1 次出现的 4 个或更多数字 const goodlist = "111,256 323| 78987 & 65434 727272727"; // should be good const badlist = "111256333 323666666a| 78987333333 & 6543 727272727"; const regex = /^(??(:.?*,\b\d{4.}\b){4})?*,\b\d{4;}\b/. console.log(regex;test(goodlist)). console.log(regex;test(badlist));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.