这清楚地适用于我能找到的每个正则表达式测试程序,以及jquery验证和MVC属性。我错过了什么?我已经尝试了文字以及RegExp,但我得到的最多的是验证前5个是数字,但除此之外,其他任何事情都失败了。
例如: https://regex101.com/r/gS0wP0/1
regex: /(\d{5}(\s?)*,?(\s?)*)+/
ko.observable().extend({ pattern: { message: 'Test Message', params:/(\d{5}(\s?)*,?(\s?)*)+/ } });
答案 0 :(得分:1)
我不清楚你要在这里完成什么。你说
我得到的最多是验证前5个是数字
我认为,从标题中,您想要一个逗号分隔的zipcodes列表,因此您链接的正则表达式测试应该因字母字符而失败。
我认为这个正则表达式可能适合你
\s*(\d{5})\s*(,\s*\d{5})*
它有点慷慨的间距,但老实说,我会先在字符串上运行正则表达式替换以消除空格。这看起来像string.replace(/\s+/g,"")
,然后你的正则表达式看起来像这样。
(\d{5})(,\d{5})*
最后,如果你想控制列表中可以包含多少个zipcodes,你可以使用两个正则表达式(空格填充或空格删除),将末尾的星号更改为数字集。
如果你想要1-5个zipcodes,你会说(\d{5})(,\d{5}){0,4}
。如果您想要3-6个邮政编码,您会说(\d{5})(,\d{5}){2,5}
,请注意,范围编号比您想要的范围小1,因为正则表达式的第一部分需要1。
如果您只想要2个或更多,您可以将最终的星号更改为+
。
最后,在任何情况下,如果你想匹配你可能做的整个字符串,你应该用^
和$
(分别是字符串的开头和结尾)包装它,就像这样{ {1}}
答案 1 :(得分:1)
ASP.NET MVC中使用的RegularExpressionAttribute
隐式检查从第一个索引开始的全长匹配。
因此,它实际上是将您的模式转换为:/^(\d{5}(\s?)*,?(\s?)*)+$/
然而,KO验证仅使用提供的模式而没有任何其他逻辑,您需要手动添加^
和$
以匹配整行:
ko.observable().extend({
pattern: {
message: 'Test Message',
params:/^(\d{5}(\s?)*,?(\s?)*)+$/ }
});