我试图为上面提到的规则编写正则表达式我试过这种方式,但它不起作用
"(?=^([0-9]|-){8,20}$)^[0-9]+[/-/][0-9]+$"
答案 0 :(得分:0)
所以,你可以通过创建一个测试字符串由8到20个字符(数字,空格或连字符)组成的正则表达式来简化问题,其中连字符不能是第一个或最后一个字符:
/^[\d\s][\d\s\-]{6,18}[\d\s]$/
然后测试该字符串是否包含单个hypen:
/^[^\-]*\-[^\-]*$/
然后它包含一个空格:
/\s/
我感谢这是一个与你要求的略有不同的答案,但认为这可能会有所帮助
答案 1 :(得分:0)
我认为只用一个正则表达式来检查字符串的长度和格式是不可能的。但是,您可以通过两个步骤实现此目的,例如:
var formatRegex = /^\d+(?:\d|\s)*-(?:\d|\s)+$/;
var myText = '111-111 11 111';
if (formatRegex.test(myText)) {
if (myText.length >= 8 && myText.length <= 20) {
console.log('ok');
}
}
答案 2 :(得分:0)
^[0-9](?:([0-9]{5,17}-)|(?=[0-9]*[-][0-9]*$)[0-9-]{6,18})[0-9]$
这个正则表达式正在运行 说明: 它将检查以[0-9]开头并以[0-9]结尾的字符串 现在,对于剩余的长度字符串,我们可以有这种模式(?:[0-9] {5,17} |(?= [0-9] [ - ] [0-9] $) [0-9 - ] {6,18}) where?:( [0-9] {5,17} - )将检查5到17个数字和1个字符串的存在 演示: https://regex101.com/r/eO3jK8/1