正则表达式应包含8到20个数字字符,包括空格和一个连字符,连字符不能是第一个或最后一个字符

时间:2015-08-08 09:58:49

标签: javascript

我试图为上面提到的规则编写正则表达式我试过这种方式,但它不起作用

"(?=^([0-9]|-){8,20}$)^[0-9]+[/-/][0-9]+$"

3 个答案:

答案 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