2016-11-15 58 views
2

我试图限制表单输入的形式,我有。特定输入用于具有非常特定要求的ID。其中的一个例子是:限制表单输入变为无效

YY.MM.DD-000.00

我与限制其使用的代码是:

<form> 

<input type="text" class="form-control" id="nid" 
         name="nid" placeholder="@lang('app.nid')" 
    pattern="[00-99]{2}+\.[00-12]{2}\.[00-31]{2}+\-[000-999]{3}+\.[00-99]{2}" 
         title="YY.MM.DD-000.00" 
         value="" /> 
<button type="submit"> 
submit 
</button> 
</form> 

而且我似乎无法使它接受。它似乎拒绝了我给予的任何投入,既不好也不好。

任何人都可以帮我找出原因吗?

回答

1

这是因为你的正则表达式中有那些+。不知道你想要什么,但如果你删除它的作品。那些加号使你的正则表达式无效。

另一个问题是你逃过了-。这引起了正则表达式不是还有工作:

pattern="[00-99]{2}\.[00-12]{2}\.[00-31]{2}-[000-999]{3}\.[00-99]{2}" 
+0

请注意,字符组可以简化并且对于月份和日期不正确。例如,月份只允许数字“[0-2]”,所以没有3月到9月。 – jeroen

+0

感谢您的意见,但可悲的是,这似乎不适用于我。它将允许任何输入没有错误。无论如何,我可以检查这是为什么? – user5740843

+0

@ user5740843“感谢您的输入,这里是一个downvote”。这很好....不管怎样,另一个问题是你逃脱了'-'。我相应地更新了我的答案 – PierreDuc

1

你误解如何字符组[...]在正则表达式的工作:他们定义,你可以输入,所以你不必赘述,当你使用它们的字符几个月和几天,您确实需要更高的数字,并且您将无法输入09(例如9月或本月的第9天)。

因此,你需要:

[0-9]{2}\.[0-9]{2}\.[0-9]{2}-[0-9]{3}\.[0-9]{2} 

注意,我也去掉了+量词,我不逃避-因为这是只有一个字符组特殊字符。但是,它既可以使用也可以不使用它们。

你可以看到它here

+0

你说得对,我的答案基本上是他的模式,但没有错误,并不能完全满足他的情况。你的问题是,它也允许月> 12和日期> 31.显然,正常的日期正则表达式在这里会更好。 regex在'regex101'内工作,但'html'使用更严格的语法 – PierreDuc

+0

@PierreDuc我同意,我个人可能会去单独的datepicker和数字输入,并在服务器端进行真正的验证。 – jeroen