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.

War es hilfreich?

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}$/
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top