问题描述
我正在尝试为上述规则编写正则表达式,我尝试过这种方式但不起作用
"(?=^([0-9]|-){8,20}$)^[0-9]+[/-/][0-9]+$"
1楼
因此,通过创建一个正则表达式来测试一个字符串是否由8到20个字符(数字,空格或连字符)组成,其中连字符不能为第一个或最后一个字符,可以使问题更简单。
/^[\d\s][\d\s\-]{6,18}[\d\s]$/
然后测试该字符串是否包含单个连字符:
/^[^\-]*\-[^\-]*$/
然后它包含一个空格:
/\s/
我很欣赏这与您要求的答案略有不同,但认为可能会有所帮助
2楼
我认为仅使用一个正则表达式就无法检查字符串的长度和格式。 但是,您可以通过两个步骤来实现此目的,例如:
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');
}
}
3楼
^[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}),其中?:([0-9] {5,17}-)将检查是否存在5至17个数字和一个-字符串演示: :