Frage
Ich brauche eine CLR Regex für Fraktionen oder ganze Zahlen und Brüche wobei
1/2
ist richtig
12 2/3
korrekt zu
und ein Minuszeichen kann kurz vor einer beliebigen Anzahl Popup.
Ich kam zum ersten Mal mit -?([0-9]* )?-?[0-9]+\/-?[0-9]+
, aber das scheint 2/7 12
auch zum Beispiel zu ermöglichen.
Lösung
Nun, das regex in zwei Teilen sein würde, die (optional) ganze Zahl:
(:?-?\d+ )?
und der Bruchteil:
-?\d+/-?\d+
Und wir brauchen die komplette Zeichenfolge übereinstimmen; so:
^(:?-?\d+ )?-?\d+/-?\d+$
Testen eines Bit:
PS> $re=[regex]'^(:?-?\d+ )?-?\d+/-?\d+$'
PS> "1/2","12 1/2","-12 2/3","-5/8","5/-8"|%{$_ -match $re} | gu
True
Dies ist jedoch erlaubt "-12 -2/-3"
auch, oder Dinge wie "1 -1/2"
, die nicht viel Sinn machen.
ETA: Ihre ursprüngliche Regex funktioniert auch. Es fehlte nur die Anker für Anfang und Ende der Schnur (^
und $
, respectively). Hinzufügen die machen es richtig.
Andere Tipps
Ich hatte gerade eine ähnliche Anforderung, aber ich wollte auch Dezimalzahlen entsprechen. Ich kam mit der folgenden regex up
^-?(?<WholeNumber>\d+)(?<Partial>(\.(?<Decimal>\d+))|(/(?<Denomiator>\d+))|(\s(?<Fraction>\d+/\d+)))?$
Oder einfach nur diese, wenn Sie nicht benannten Gruppen wollen
^-?\d+((\.\d+)|(/\d+)|(\s\d+/\d+))?$
Um die Dezimalzahl zu entfernen Validierung, wäre es zu verkürzen
^-?\d+((/\d+)|(\s\d+/\d+))?$
Hoffe, das hilft jemand!
versuchen, dies nur für einzelne Fraktion und nicht die ganze Zahl
/^\d{1}\/?\d{1}$/