gpt4 book ai didi

javascript - 用于验证范围的递归正则表达式

转载 作者:行者123 更新时间:2023-11-28 12:27:59 24 4
gpt4 key购买 nike

我正在制作一个打印系统,在某个时刻我需要使用递归正则表达式来验证输入的按键,仅当它与正则表达式匹配时才允许它被接受。但这是一个递归表达式!

一些有效数据:

[0]: "1-9"
[1]: "1"
[2]: "1-9,1"
[3]: "1,1-9,2,1-8"

在 EBNF 中这将非常容易:

validation = ( number ) | ( number, '-', number ), ',', validation ;
number = digit, { digit } ;
digit = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 ;

但是正则表达式并不遵循与 EBNF 相同的方法。我读过有关递归正则表达式的内容,但我仍然对它们感到困惑。我当前的非递归尝试,验证每个逗号分隔的有效值的 1/1:

/([0-9]*)|(([0-9]*)-([0-9]*))/g

这样我就可以单独验证每个条目,但我找到了一种验证所有内容的方法。

临时解决方案是:

pattern = /([0-9]*)|(([0-9]*)-([0-9]*))/g
fields = fieldValues.split(',')

我正在创建一个包含 true 或 false 的数组,以了解表达式是否匹配。我不能在正则表达式中完成这一切,而不使用 JavaScript 吗?

最佳答案

我想你想要这样的东西,

> /^\d+(?:-\d+)?(,\d+(?:-\d+)?)*$/.test("1-9,1");
true
> /^\d+(?:-\d+)?(,\d+(?:-\d+)?)*$/.test("1-9,1,");
false
> /^\d+(?:-\d+)?(,\d+(?:-\d+)?)*$/.test("1-9,1-1");
true

关于javascript - 用于验证范围的递归正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25996046/

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