首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JS验证横线线索枚举

JS验证横线线索枚举
EN

Stack Overflow用户
提问于 2021-06-20 21:48:02
回答 1查看 55关注 0票数 0

我需要验证填字线索的枚举(括号中的数字)。例如,“大星(3,5)”-枚举是3,5

我正在为所需的正则表达式而奋斗。规则应如下:

  • 只允许0-9字符、连字符和逗号。
  • 每个数字不应该以零开头,例如"09“应该只是"9”
  • 它应该从一个数字开始
  • 它应该以数字结尾
  • 它不允许重复连字符/逗号,例如"3,5“或”3 -5“或"3,-5”或3-,5“。

一些有效的例子..。

  • 1
  • 1,2
  • 1,2-3
  • 1,2-3,4

一些无效的例子..。

  • 文本
  • -1
  • 1、
  • 1,2
  • 0-1
  • 3-04

希望你能明白。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-20 21:58:07

正则表达式非常强大,但有时却很难写出,特别是如果您不经常使用它们。这就是为什么我经常使用本站提供帮助的原因。

在评论中发言后,一个逻辑错误变得很明显: regexp不会与0匹配任何东西,即使它没有以它开始。如果没有-,它也不会匹配数字,就像10一样。

现在,我想出了([1-9]([0-9]+)?(((\-|\,)[1-9]([0-9]+)?)+)?),但是还有另一个问题:

  • 10-5-40将按预期匹配
  • 3-203-23 and 203-02也将是匹配的。因此,除了RegExp之外,我还包含了一些JS逻辑。希望现在它能如愿以偿。

代码语言:javascript
复制
let Regexp1 = /([1-9]([0-9]+)?(((\-|\,)[1-9]([0-9]+)?)+)?)/;
let Regexp2 = /([1-9]([0-9]+)?(((\-|\,)[1-9]([0-9]+)?)+))/;

function test(t) {
  match1 = (t.match(Regexp1) != null);
  match2 = (t.match(Regexp2) != null);
  
  let matches = false;
  
  if(match1 && match2) {
    matches = true;
  } else if(match1 && !match2) {
    if(t.match(Regexp1)[0].length == t.length) {
      matches = true;
    } else {
      matches = false;
    }
  }
  
  if(t.match(Regexp1)[0].length != t.length) {
    matches = false;
  }
  
  console.log(matches);
  return matches;
  
}

test("10-5"); // true
test("03-4"); // false
test("0-5"); // false
test("1,05"); // false
test("1--5"); // false
test("10"); // true
test("10-05"); // false

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

https://stackoverflow.com/questions/68060298

复制
相关文章

相似问题

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