为什么这种模式不适用于敲除验证?(分隔的邮政编码)
Why is this pattern not working with knockout validation? (delimited zip codes)
这显然适用于我能找到的每一个regex测试程序,以及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?)*)+/ } });
ASP.NET MVC中使用的RegularExpressionAttribute
隐式检查从第一个索引开始的全长匹配。
因此,它本质上是将您的模式转换为:/^('d{5}('s?)*,?('s?)*)+$/
然而,KO验证仅适用于所提供的模式,没有任何额外的逻辑,您需要手动添加^
和$
以匹配整条线:
ko.observable().extend({
pattern: {
message: 'Test Message',
params:/^('d{5}('s?)*,?('s?)*)+$/ }
});
我不清楚你想在这里完成什么。你说
我得到的最多的是验证前5个是数字
我认为,从标题来看,您想要一个逗号分隔的邮政编码列表,这样您链接的regex测试应该会因为alpha字符而失败。
我认为这个正则表达式可能适用于
's*('d{5})'s*(,'s*'d{5})*
它的间距有点大,但老实说,我会在字符串上运行regex替换,首先去掉空格。它看起来像string.replace(/'s+/g,"")
,然后您的正则表达式可以看起来像这样。
('d{5})(,'d{5})*
最后,使用这两个正则表达式(填充空格或删除空格),如果您想控制列表中的邮政编码数量,可以将末尾的星号更改为数字集。
如果你想要1-5个邮政编码,你会说('d{5})(,'d{5}){0,4}
。如果你想要3-6个邮政编码,你会说('d{5})(,'d{5}){2,5}
,请注意,范围数字比你想要的范围少一个,因为正则表达式的第一部分需要1。
如果您只想要2个或更多,您可以将最后一个星号更改为+
。
最后,在任何情况下,如果您想匹配整个字符串(您可能会这样做),您应该用^
和$
(分别是字符串的开始和结束)来包装它,就像^('d{5})(,'d{5})*$
一样
- javascript函数内部的代码用逗号而不是分号分隔
- 可以't用回车符分隔那个字符串
- 计算输入中有多少逗号分隔的字符串
- 选择带有空格分隔单词的元素
- 尝试使用Javascript正则表达式来获取“&"分隔文本,无论它是否's是最后一个值
- 使用JavaScript分析分隔文本行
- 比较逗号分隔的字符串
- 在谷歌api v3中使用地理自动完成功能获取邮政编码
- 用分隔符分隔具有多个整数值的字符串的Javascript"重试错误的值
- Javascript-Regex,用于逗号分隔的字母数字
- 使用jquery过滤逗号分隔的span文本
- 在javascript中用逗号分隔的字符串分割值
- 如何在java脚本中用单引号写逗号分隔的值
- 如何将逗号分隔的列表转换为<ul>列表
- 输入只允许6位数字,逗号分隔后,允许角js中的另外6位数字
- 如何从由“”分隔的字符串中提取最后一个文本|&”;
- 根据客户的地理位置、邮政编码和位置切换图像
- 匹配由单个空格分隔的单词,单词的开头或结尾不能有空格
- JS将分隔符分隔的字符串转换为数组元素
- 为什么这种模式不适用于敲除验证?(分隔的邮政编码)