2016-04-26 96 views
3

我試圖使用正則表達式來驗證文本輸入的爲英寸值的格式爲:正則表達式來驗證輸入英寸值

<input name="widthfield" type="text" ng-pattern="/^([0-9]{1,2}((\'\')?|(\'\'[0-9]\/[0-9]{1,2})*))|([0-9]{1,2}(\.[0-9]{1,2})?)$/" placeholder="ie 18''1/2 or 18.25" ng-model="data.boardWidth" ng-required="true"/> 

它不工作,你可以幫我查一下我的正則表達式?

如果我把它分爲兩個部分:

/^([0-9]{1,2}((\'\')?|(\'\'[0-9]\/[0-9]{1,2})*))$/ 

/^([0-9]{1,2}(\.[0-9]{1,2})?)$/ 

於是他們倆分開工作。

我需要的格式是英寸或十進制英寸 18.25或18''3/4

感謝

+2

方評論:英寸用雙引號而不是兩個單引號表示。 –

+0

您可以使用'\ d'而不是'[0-9]'。然後使用'\ d \ d?'也比'\ d {1,2}'更短' – Druzion

+0

另外,['^ \ d +((\。\ d +)|(\'\'| \「 )(\ d + \/\ d +)?)?$'works](https://regex101.com/r/eV3uS2/1)(如果您使用@ Wiktor的解決方案) – Druzion

回答

1

運營商|隱式包裝兩種替代方案。所以這兩者是相同的:

(regex1)|(regex2) 
regex1|regex2 

在你的情況,這意味着替代1點開始與^但不與$和周圍的替代2.另一種方式它工作正常,我如果最終我改變像這樣:

/^([0-9]{1,2}((\'\')?|(\'\'[0-9]\/[0-9]{1,2})*))$|^([0-9]{1,2}(\.[0-9]{1,2})?)$/ 
+0

好的,這對我有效。 @AndréStannek – Louis

0

您可以使用

ng-pattern="(\\d{1,2}(|\\x27\\x27|(\\x27\\x27\\d/\\d{1,2})*)|\\d{1,2}(\\.\\d{1,2})?)" 

撇號應與\x27表示。 如果您有雙重報價,請將\x27\x27替換爲\x22

當您將模式作爲字符串傳遞時,角度將自動添加錨點,因此不需要添加錨點。

這是sample regex demo

+0

謝謝,但我得到這個錯誤與您的代碼:angular.js:12722錯誤:[$ parse:lexerr] Lexer錯誤:意外的下一個字符在列1-1 [\]在表達式[(\\ d {1,2}(| X27 \\ \\ X27 |(\\ X27 X27 \\ \\ d/\\ d {1,2})*)| \\ d {1,2} (\\。\\ d {1,2})?)]。 http://errors.angularjs.org/1.4.9/$parse/lexerr?p0=Unexpected%20nextharacter%20&p1=s%201-1 %20%5B%5C%5D&P2 =(%5C%5CD%7B1%2C2%7D(%7C%5C%5Cx27%5C%5Cx27%7C(%5C%5Cx27%5C%5Cx27%5C%5CD%2F%5C %7C%5C%5Cd%7B1%2C2%7D(%5C%5C%5C%5Cd%7B1%2C2%7D)%3F) – Louis

+0

這意味着你沒有複製/按照原樣粘貼我的解決方案,你必須在它周圍添加'/.../'。 –