Javascript 递归模式
我想检查一个递归文本,它有三条规则 1º:所有字符串应为0-31+一个点之间的数字序列 示例:1.23.5.12 2º:字符串不能以点开头或结尾。 这样地。 .1.23.5.12 3º最多可以写入51位数字(遵循前面的规则) 我试图为我的js函数创建一个模式。但这不起作用 这是我的职责:Javascript 递归模式,javascript,regex,web,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
var str = document.getElementById("numero").value;
var patt1 = /^[0-9]+\./g;
var result = str.match(patt1);
document.getElementById("demo").innerHTML = result;
模式中有什么错误?您可以使用
/^(?!(?:\D*\d){52})(?:[12]?\d|3[01])(?:\.(?:[12]?\d|3[01]))*$/
见
详细信息
-字符串的开头^
-如果有52个或更多的数字以任何0+非数字分隔,则失败(?!(?:\D*\D){52})
-(?:[12]?\d|3[01])
或1
(可选)后跟任意一位数字或2
后跟3
或0
(1
-0
)31
-零次或多次连续重复(?:\。(?:[12]?\d|3[01])*
-dot\。
-见上文((?:[12]?\d|3[01])
-0
)31
-字符串结束$
if (/^(?!(?:\D*\d){52})(?:[12]?\d|3[01])(?:\.(?:[12]?\d|3[01]))*$/.test(str)) {
// Valid!
}
测试:
var rx=/^(?(?:\D*\D){52})(?:[12]?\D | 3[01])(?:\(?:[12]?\D | 3[01])*$;
var-strs=[“.12”、“123”、“1.23.5.12”、“12345678”];
用于(STR的var s){
控制台日志,“=>”,接收测试);
}
正则表达式^[0-9]+\.
从字符串开始匹配^
一个或多个数字[0-9]+
,后跟一个点\.
您可以使用:
解释
断言行的开头^
负向前看,断言后面的不是一个可选点后面跟一个或多个数字的52倍(?!(\.?\d){52})
匹配数字0-31(?:[0-9]|[12][0-9]|[3[01])
在匹配一个点的一组中重复一次,然后再重复数字0-31,并重复一次或多次,以使没有点的单个数字不匹配(?:\。(?:[0-9]|[12][0-9]|[3[01])+
断言字符串的结尾$
const字符串=[
'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'
];
让模式=/^(?)(\.?\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));
});
它不会将数字限制在预期范围0-31
,并且numero
的内容必须以dotSo结尾,如果我将模式更改为“/^[0-31]+\./g;”,它应该可以工作吗?我开始使用模式了,这对我来说有点混乱,哈哈,这也行不通:问题解决了。感谢您的回答Andreas:)另一个变体:我尝试了这个,但是模式接受诸如“.12”(以点开头)、“123”(大于31)之类的值@Abraham请查看带有测试的代码片段。请以这种方式实现正则表达式以避免问题,即不要使用g
修饰符,使用RegExp\test
。好的,我没有看到测试。对不起,让我试试:)它能用Wiktor,再次谢谢你。这是你第二天帮我学习这些模式:)我终于使用了这篇文章的第一个答案。但是谢谢你的帮助:)