gpt4 book ai didi

javascript - 用于验证的正则表达式

转载 作者:行者123 更新时间:2023-11-28 14:03:53 25 4
gpt4 key购买 nike

谁能告诉我如何为以下场景编写正则表达式。输入只能是数字或 -(连字符)或 ,(逗号)。输入可以是以下任意一种形式

23

23,26

1-23

1-23,24
24,25-56,58-40,45

此外,当给出一个范围内的数字时,第二个数字应大于第一个数字。 23-1 不应该被允许。如果已经输入了某个号码,则不应再次输入该号码。像 1-23,23 不应该被允许

最佳答案

我不会用“我认为”或“也许”来狡辩——你不能使用正则表达式来做到这一点。

与正则表达式匹配可以验证输入的形式是否正确,也可以用于提取输入的片段,但它不能做值比较,或重复消除(除非在有限的明确定义的情况下),或范围检查。

我将您输入的内容解释为以逗号分隔的值列表或值范围;采用 BNFish 表示法:

value :: number
range :: value '-' value
term :: value | range
list :: term [','term]*

可以构建一个与此匹配的正则表达式来验证结构是否正确,但您必须对值比较进行其他验证并防止重复的数字。

我能想到的最直接的正则表达式(在短时间内)是这个

([0-9]+|[0-9]+-[0-9]+)(, *([0-9]+|[0-9]+-[0-9]+))*

您有数字数字-数字,可选地后跟逗号[可选空格](数字数字-数字) - 重复零次或多次。

<小时/>

我在 http://www.fileformat.info/tool/regex.htm 测试了这个正则表达式输入 3,4-12,6,2,90-221

当然,对于允许的正则表达式方言,您可以将 [0-9] 替换为 [\d]。

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

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