首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何定义模式并允许模式只在模式被破坏时重复

如何定义模式并允许模式只在模式被破坏时重复
EN

Stack Overflow用户
提问于 2013-04-24 17:32:59
回答 2查看 285关注 0票数 3

我试图编写一个JavaScript正则表达式,以便只允许以下输入:

  • 数字
  • 中间有逗号的数字
  • 中间有连字符的数字,但后面只有另一个数字或逗号,后面跟着一个数字。这种模式可以再次重复。

到目前为止,我有以下表达:

代码语言:javascript
复制
^[0-9]$|^[0-9]+$|^[0-9](-?,?[0-9])*$

然而,这是允许1-1-1,我不想要。一个连字符只能出现在另一个数字-连字符-数字组合后面。

此链接可能会有所帮助:http://regexr.com?34ljt

下列样本应被评估为有效:

01,03,05-08 10 0103.05 01,03,05-08 01 1,1,5-6,1,1 1,1,5-6,1,1-3 12,12,1-9 1-9,5,5 1-9,9,9,5-6 1-2 11-11 11 11 1,1 1,1,1 11,11,11 1111 1,1,1,1 1 56,1 1,1 1,3 1,3,4,5 1,3

下列样本应被评估为无效:

斯德夫 11-11-11-11 1-1-1-1 F 01, 0103-05-08, -1,4-,-5,8909 1,1,1-1 1,1,11-1111-1 1-1 1,1 1-1 1- 1,, 、-1- df -1 ,1

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-24 17:41:11

试一试

代码语言:javascript
复制
/^\d+(-\d+)?(,\d+(-\d+)?)*$/

继评论意见之后

如果有连续的范围,防止匹配的一种方法是添加一个负面的前瞻性。

代码语言:javascript
复制
(?!.*-\d+,\d+-)

所以regex变成

代码语言:javascript
复制
/^(?!.*-\d+,\d+-)\d+(-\d+)?(,\d+(-\d+)?)*$/

如果消极展望内的模式可以匹配,则会阻止整个正则表达式匹配。使用.*时,如果在字符串前面的任何地方都能找到-1,1-,则会阻止匹配。

票数 2
EN

Stack Overflow用户

发布于 2013-04-24 17:45:56

不错的链接,并赞扬提供足够的例子,以彻底确定一个解决方案是否正确。这似乎是可行的:

代码语言:javascript
复制
^([0-9]+(-[0-9]+)?(,(?!$)|$))+$

http://regexr.com?34lk6

因此:数字,可选地后面跟着一个破折号和更多的数字,后面跟着一个逗号(除非逗号是行尾之前的最后一个字符)或行尾。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16198564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档