2016-11-15 70 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