2010-03-24 14 views
5

Sorry für die potenziell dumme Frage, aber ich versuche zusammen einen regulären Ausdruck zu ziehen, die ermöglichen:Regular Expression für Dezimal oder Blank

Eine Zahl mit 1 oder 2 Nummern vor einem Komma und 0-6 Zahlen nach dem Komma. Allerdings muss ich auch zulassen, dass das Feld leer ist, wenn dies erforderlich ist.

Gültige Beispiele

0.952321 
1.20394 
12.12 
25 
Blank 

Ungültige Beispiele

123.45678 
1.1234567 

Bitte kann jemand helfen?

+0

Welche Sprache verwenden Sie? – miorel

+0

was meinst du mit leer? – PierrOz

Antwort

1

^(?:|\d{1,2}(?:\.\d{0,6})?)$

der Teil vor dem Rohrrohling übereinstimmt. Der Teil nach dem Übereinstimmen mit einer oder zwei Ziffern, optional gefolgt von einem Punkt und bis zu sechs Ziffern. Die ?: sind so, dass wir keine einfangenden Gruppen verwenden, wenn sie nicht benötigt werden.

Hoffe, das hilft!

+0

in Ihrer Regex die. ist obligatorisch: es passt nicht 25 im obigen Beispiel – PierrOz

+0

danke für diesen Kumpel –

+0

@PierrOz, yeah Ich überprüfte die Frage und reparierte sie :) Danke! – miorel

11
^(?:\d{1,2}(?:\.\d{0,6})?)?$ 

Sollte der Trick tun.

+0

danke für deine hilfe –

+3

@Phil P: Wenn eine der Antworten dein Problem gelöst hat, upvote und/oder akzeptiere die beste Antwort. – AxelEckenberger

2

Sie sollten die Sprache angeben, in der Sie den regulären Ausdruck verwenden, viele verfügen über Funktionen, mit denen Sie besser lesbare Ausdrücke erstellen können. Hier ist eine ausfallsichere POSIX regex:

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

Wenn der Dezimalteil ist optional, Sie

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

+1 für nicht mit einer Zahl mit einer Dezimalzahl (z. B. "25.") übereinstimmen. Obwohl in der Frage nicht explizit angegeben, würde ich diese Anforderung annehmen. – Mark

0
^(\d{1,2}(\.\d{1,6})?)?$ 
+0

Ihre Regex würde einer 8-stelligen Ganzzahl entsprechen. – miorel

+0

@Miorel: ah ha du hast Recht :) Ich denke, wir werden am Ende die gleiche haben :) – PierrOz

+0

Wahrscheinlich;) Ich mag, wie Sie die leere Option behandelt, ich sollte meine zu diesem ändern! – miorel

0

Lesen zwischen den Zeilen verwenden können, ich die Definition von zulässigen Eingangs erweitert und nicht und angenommen, dass Sie nur die Nummer im beschriebenen Format erfassen wollten.

Zum Beispiel diese Zahlen als die Zahl auf der rechten Seite erfassen würde und sind alle akzeptabel Eingang:

"0.952321 " 0.952321    (trailing spaces stripped)  
" 1.20394 " 1.20394    (leading and trailing spaces stripped) 
"12.12"   12.12    (no leading or trailing spaces) 
"12.123 "  12.123 
" .1234 "   .1234    (no leading digit -- start with decimal) 
"25"     25    (no decimal) 
" "    " " ?    (space. space captured or not) 
"12."    12.    (1 or 2 digits, decimal, no numbers after decimal) 

Nicht OK-Eingang:

"."         just a decimal 
"123456789"       more than 2 digits lefthand 
123          ""  "" 
123.45678 
1.1234567        more than 6 digits right hand 
[a-zA_Z]        not a digit... 

Also, da wird diese regex tun es:

/^\s*(     # beginning of string and strip leading space         
| \d{1,2}\.?   # 1 or 2 digits with optional decimal 
| \d{0,2}\.\d{1,6}  # 0,1, 2 digits with a decimal with digits 
| \s+     # remove if you do not want to capture space 
)\s*$     # trailing blanks to the end 
/x 
0

Im Allgemeinen, dhunbegrenzte Dezimalstellen:

^-?(([1-9]\d*)|0)(.0*[1-9](0*[1-9])*)?$

0

ich eine davon verwenden würde:

Um alle Ihre Dezimalzahlen zu entsprechen:

(\d+\.\d+){0,1} 

Um genauer zu sein in Nummer vor/nach dem Punkt, Versuchen Sie/Variieren Sie mit irgendwelchen von diesen:

(\d+\.\d{2}){0,1} 
(\d{4}\.\d{2}){0,1}