2016-04-26 8 views
3

Ich versuche, einen regulären Ausdruck zu verwenden, das Format einer Texteingabe für Zoll Wert zu überprüfen:regex zu validieren Eingang für Zoll Wert

<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"/> 

Es funktioniert nicht, können Sie mir meine regex helfen, überprüfen?

Wenn ich es in zwei Teile unterteilen:

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

und

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

dann beide gut getrennt sie arbeiten.

Ich brauche das Format Zoll oder dezimal Zoll 18.25 oder 18''3/4

Dank

+2

Side Kommentar: Zoll sind durch ein Doppel-Anführungszeichen, nicht zwei einfache Anführungszeichen dargestellt. –

+0

Sie können '\ d' anstelle von' [0-9] 'verwenden. Und dann wäre es auch kürzer, '\ d \ d?' Als '\ d {1,2}' – Druzion

+0

zu verwenden. Auch ['^ \ d + ((\. \ D +) | (\ '\' | \") (\ d + \/\ d +)?)? $ 'funktioniert] (https://regex101.com/r/eV3uS2/1) (Wenn Sie @ Wiktors Lösung in Kombination damit verwenden) – Druzion

Antwort

1

Der Operator | kapselt implizit beide Alternativen ein. So sind diese beiden die gleiche:

(regex1)|(regex2) 
regex1|regex2 

In Ihrem Fall bedeutet dies, dass alternative 1 beginnt mit ^ aber mit $ und die andere Art und Weise nicht um für 2. alternative zu Ende, das es funktioniert gut für mich, wenn ich es ändern wie folgt:

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

Gut, das funktioniert für mich @ AndréStannek – Louis

0

Sie

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

Der Apostroph verwenden können, um sein sollte mit \x27 vertreten sein. Wenn Sie ein Doppelangebot haben, ersetzen Sie das \x27\x27 durch \x22.

Wenn Sie das Muster als String, Winkel wird die ^ und $ Anker automatisch hinzufügen, damit keine Notwendigkeit, sie hinzufügen.

Hier ist ein sample regex demo.

+0

Danke, aber ich bekomme diesen Fehler mit Ihrem Code: angular.js: 12722 Fehler: [$ parse: lexerr] Lexer Fehler: Unerwartetes nächstes Zeichen in den Spalten 1-1 [\] im Ausdruck [(\\ 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 % 5Cd% 7B1% 2C2% 7D) *)% 7C% 5C% 5Cd% 7B1% 2C2% 7D (% 5C% 5C% 5C% 5Cd% 7B1% 2C2% 7D)% 3F) – Louis

+0

Das heißt, Sie haben nicht kopiert/paste meine Lösung genau so, wie sie ist .. Du musst '/.../' drumherum hinzugefügt haben –