我目前正在开发一个使用java,javascript,html,jquery等的web应用程序,在某些时候我需要检查输入是否与已知模式匹配,只有在它是真的时才进行。< / p>
模式应该是[至少一个但最多3个数字介于0-9之间] / [正好4个数字介于0-9之间],因此唯一可接受的变化应该是
1/2014
或23/2015
或123/2016
。
没有别的,我也不能接受像1234/3012
或其他任何东西这样的东西,这就是我的问题,它接受了它可以找到上述模式的所有内容,所以就像来自12345/6789
它接受并保存345/6789
。
我是regex的新手,所以我查看了http://regexr.com,这是我在javascript中的代码:
$.validator.addMethod("hatarozat", function(value, element) {
return (this.optional(element) || /[0-9]{1,3}(?:\/)[0-9]{4}/i.test(value));
}, "Hibás határozat szám!");
所以这是我的正则表达式:/[0-9]{1,3}(?:\/)[0-9]{4}/i
我使用上述网站建立的。可能是什么问题,或者我怎么能实现我所描述的?我试过了/^[0-9]{1,3}(?:\/)[0-9]{4}$/i
,但这似乎不起作用,请任何人帮助我,我做了其他一切,并且对于看起来如此简单但我无法解决的事情感到非常紧张。谢谢!
答案 0 :(得分:1)
您使用主播(^
和$
)的最后一个正则表达式是正确的正则表达式。阻止您的代码工作的是this.optional(element) ||
。因为这是一个静态的东西,并且可能是真的,所以它没有显示任何错误(因为||
是一个OR条件,如果第一个为真,整数返回true,则根本不检查正则表达式)
所以,使用
return /^[0-9]{1,3}\/[0-9]{4}$/.test(value);
请注意,您不需要(?:...)
和\/
,因为分组在这里没有做任何重要的事情,而且只是多余的。锚点很重要,因为您希望整个字符串与模式匹配(并且^
锚定字符串开头的正则表达式,$
在字符串的末尾执行此操作。)
答案 1 :(得分:0)
您需要在regex表达式中使用以下特殊字符:
^
和$
或\b
所以2正则表达式是正确的:
/\b[0-9]{1,3}(?:\/)[0-9]{4}\b/i;
或
/^[0-9]{1,3}(?:\/)[0-9]{4}$/i