递归Patten js

时间:2018-07-22 10:13:50

标签: javascript regex web

我要检查一个符合三个规则的递归文本。

1º:所有字符串应为介于0-31 +点之间的数字序列。

示例:1.23.5.12

2º:字符串不能以点开头或结尾。 像这样。  .1.23.5.12。

3º(最多可以输入51个数字)(遵循以前的规则)

我试图为我的js函数建立模式。但这不起作用。

这是我的功能:

  var str = document.getElementById("numero").value;
        var patt1 = /^[0-9]+\./g;
        var result = str.match(patt1);
        document.getElementById("demo").innerHTML = result;

模式有什么问题?

2 个答案:

答案 0 :(得分:2)

您可以使用

/^(?!(?:\D*\d){52})(?:[12]?\d|3[01])(?:\.(?:[12]?\d|3[01]))*$/

请参见regex demo

详细信息

  • ^-字符串的开头
  • (?!(?:\D*\d){52})-如果有52个或更多数字与任意0+个非数字分开,则失败
  • (?:[12]?\d|3[01])-12(可选),后跟任意一位数字或3,后跟01({{ 1}}-0
  • 31-的零次或更多次连续重复
    • (?:\.(?:[12]?\d|3[01]))*-点
    • \.-参见上文({{11}-(?:[12]?\d|3[01])
  • 0-字符串的结尾。

31一起使用:

$

测试:

test

答案 1 :(得分:2)

正则表达式^[0-9]+\.从字符串^的开头开始匹配一个或多个数字[0-9]+,后跟点\.

您可以使用:

^(?!(\.?\d){52})(?:[0-9]|[12][0-9]|3[01])(?:\.(?:[0-9]|[12][0-9]|3[01]))+$

说明

  • ^断言行的开头
  • (?!(\.?\d){52})否定性地断言以下内容不是可选点后跟一个或多个数字的52倍
  • (?:[0-9]|[12][0-9]|3[01])匹配数字0-31
  • (?:\.(?:[0-9]|[12][0-9]|3[01]))+在与点相匹配的组中重复,后跟数字0-31,并重复一次或多次,以使没有点的单个数字不匹配
  • $声明字符串的结尾

const strings = [
  '1.23.5.12',
  '1.23.5.12.',
  '.1.23.5.12.',
  '1.23.5.12',
  '1',
  '1.23.5.12.1.23.5.1.23.5.12.1.23.5.1.23.5.12.1.23.5.1.23.5.12.1.23.5.1.23.5.12.1.23.5.2',
  '1.23.5.12.1.23.5.12.1.23.5.12.1.23.5.12.1.23.5.12.1.23.5.12.1.23.5.12.1.23.5.12.1.23.5.12'

];
let pattern = /^(?!(\.?\d){52})(?:[0-9]|[12][0-9]|3[01])(?:\.(?:[0-9]|[12][0-9]|3[01]))+$/;
strings.forEach((s) => {
  console.log(s + " ==> " + pattern.test(s));
});