我有一個困難的用戶輸入驗證問題(或者至少對我來說很困難)。我試圖確保用戶輸入一個允許的Angular表達式的預定義子集,如果他們試圖將角度添加到他們的輸入。我目前使用http://www.regexpal.com/使用正則表達式驗證段落輸入中的角度表達式
(實際執行中使用JavaScript的HTML網頁)來測試我的表情和以下兩種情況:
VALID
Any text, punctuation (except double-{), or numb3r5 {{model.variable|phone}} is valid
Any text, punctuation (except double-{), or numb3r5 {{model.variable}} is valid.
Stick with the format {{model.variable|zipcode}} and we remain valid.
無效
Any text, punctuation (except double-{), or numb3r5 {{model.variable|phone}} is valid
Any text, punctuation (except double-{), or numb3r5 {{model.variable}} is valid.
Any deviation from the format, e.g. {{model.variable|custom}} makes the entire input invalid.
我想通過正則表達式來識別三個角度塊,並且與「自定義」塊不匹配...
{{model\.[^}|]+(\|((ein)|(phone)|(zipcode)|(currency:'':0)){1})?}}
......但我不能得到它來強制執行該正則表達式。我在lookaheads上嘗試了很多變體,這是我認爲我需要的,但它與有效輸入不匹配,所以很顯然,我已關閉。
^(((.(?!({{)|(}})))*({{model\.[^}|]+(\|((ein)|(phone)|(zipcode)|(currency:'':0)){1})?}}))?)+$
有沒有人知道我可以驗證這個輸入?
不錯的評論正則表達式!如果我打算使用在生產代碼中複雜的正則表達式,我可能會這樣評論它,因爲正則表達式在達到任何複雜性時都非常難以讀取/調試。 –
謝謝@MichaelL。是的,事實是,我有時會深入**自己的**表達,並且不能從另一個角度講出一個')'。很高興'\ x'(freespacing)適合那些大個子。 –
非常酷。我喜歡使用非捕獲組來從匹配結果中剔除無用的垃圾。我將運行這個,看看是否可以讓它在構建整個輸入的整體匹配時忽略換行符/回車(我道歉,這是我的錯誤 - 我說「段落輸入」當我的意思是「包含一個或多個段落的輸入「)。謝謝!另外,不用擔心空白文本 - 在我的應用程序中,只要任何Angular有效,用戶就可以輸入他們想要欺騙打印格式間距的任何錯誤。 – KieronAlsmith