正确表达模式的正则表达式,无需“切入”字符串不起作用

时间:2017-03-13 09:54:03

标签: javascript regex

我目前正在开发一个使用java,javascript,html,jquery等的web应用程序,在某些时候我需要检查输入是否与已知模式匹配,只有在它是真的时才进行。< / p>

模式应该是[至少一个但最多3个数字介于0-9之间] / [正好4个数字介于0-9之间],因此唯一可接受的变化应该是

1/201423/2015123/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,但这似乎不起作用,请任何人帮助我,我做了其他一切,并且对于看起来如此简单但我无法解决的事情感到非常紧张。谢谢!

2 个答案:

答案 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