我需要验证这种类型的字符串
0415256987, 0452 654 987, 0411 236589, 0 410 258 987 etc.
每个数字都有10位数字,空格逗号,新行,是允许的。
在我的项目中,这是一个textarea,用户输入逗号分隔的手机号码字符串。 正则表达式用于js验证。 空间和新线路允许用户减少输入数字的难以置信的经验,并适应各种输入手机号码的风格
你会如何编写正则表达式来验证它?
我尝试了各种正则表达式字符串,所有这些都在第一个逗号后停止工作。 我最好发布我的js。也许还有其他一些错误,为什么它不起作用。 即时通讯使用jquery验证插件。 我还删除了10digit检查,并且它干扰了验证错误消息,并且可以在服务器上轻松修复(拒绝或解析)。
$.validator.addMethod("numbersCommasSpacesOnly",
function(value, element){
return /^(\d\s*\r*\n*-*,*)$/.test(value);
},
"Only numbers, spaces and commas are allowed"
);
$("#UserContactsOptinForm").validate({
rules: {
"data[User][contacts]": {// compound rule
required: true,
numbersCommasSpacesOnly: true
}
},
messages: {
"data[User][contacts]": {
required: "this field is required"
}
}
});
});
谢谢
答案 0 :(得分:4)
(\d\s*\r*\n*-*,*){10}
应该匹配10位数字和任意数量的空格,逗号,连字符和返回。
答案 1 :(得分:3)
首先,删除空格和换行符,然后测试:
function testNumber(numbers){
if( !numbers ) return false;
return numbers.replace(/\s+/gm,'').search(/^(\d{10},)*\d{10}$/)>-1;
}
这对于测试字符串以及数字之间的任何形式的间距都是预期的,并且不允许连续使用多个逗号。
要将此扩展到您的代码,只需替换您拥有的function(value,element)
代码:
function(value,element){
if( !value ) return false;
return /^(\d{10},)*\d{10}$/.test(value.replace(/\s+/gm,''));
}
如果要忽略数字计数,可以将{10}
替换为*
。
答案 2 :(得分:2)
匹配单个10位数字:
([ \n]*[0-9]){10}
然后匹配一个或多个,用逗号分隔:
(([ \n]*[0-9]){10}[ \n]*,)*([ \n]*[0-9]){10}
以上正则表达式至少与您的字符串匹配,使用http://www.regextester.com/验证。
答案 3 :(得分:0)
包含空格或短划线的10位数字,后跟逗号或更多空格,然后更多相同:
((\d[\s-]*){10}([\s,]+|\b))+
答案 4 :(得分:0)
在Java中,您可以先string.replaceAll("\\s*", "")
。然后它将匹配\\d{10}
。这只会匹配,而不是获得不同的部分,例如区号等