Weer eens een kort vraagje van mij dat Google niet afdoende kon beantwoorden. Ik krijg een string binnen waarin een double met eenheid steekt, bv "-15,48 m/s" of "78m^2". Nu moet ik gaan herkennen of het getal wel een correcte double is en of de eenheid klopt. Hiervoor wil ik een reguliere expressie gebruiken.
Voor de double heb ik als herkenningsstring:
Ik zit echter wat in de rats met de eenheid... Het is de bedoeling dat de gebruiker deze kan opgeven. Gebruikersgegevens in een RegEx doen meteen aan injectiemisbruik denken... Vanzodra de door de gebruiker opgegeven eenheid een speciaal teken voor reguliere expressies bevat, gaat het mis. Ik denk maar aan een gedrocht als "bleh.\n["... Dat geeft zeker problemen.
Daarom vroeg ik me af of er een soort escape / addslashes mechanisme in c# zit om speciale tekens voor reguliere expressies te escapen. Het eerder gegeven voorbeeld "bleh.\n[" wordt dan "bleh\.\\n\\[". Bestaat zoiets of ben ik gewoon hardop aan het dromen?
En als het niet bestaat en ik met een string replace aan het werk moet, zijn de volgende tekens alle speciale symbolen waar ik op moet letten?
Voor de double heb ik als herkenningsstring:
code:
Waarbij NumberGroupSeparator en NumberDecimalSeparator uit System.Globalization.NumberFormatInfo gehaald worden. Dat werkt perfect. Invoer als "-15", "1.457,17", "-1000,0",... wordt allemaal correct herkend.1
| @"^-?([0-9]){1,3}?(" + nfi.NumberGroupSeparator + "?[0-9][0-9][0-9])*(" + nfi.NumberDecimalSeparator + "[0-9]+)?$" |
Ik zit echter wat in de rats met de eenheid... Het is de bedoeling dat de gebruiker deze kan opgeven. Gebruikersgegevens in een RegEx doen meteen aan injectiemisbruik denken... Vanzodra de door de gebruiker opgegeven eenheid een speciaal teken voor reguliere expressies bevat, gaat het mis. Ik denk maar aan een gedrocht als "bleh.\n["... Dat geeft zeker problemen.
Daarom vroeg ik me af of er een soort escape / addslashes mechanisme in c# zit om speciale tekens voor reguliere expressies te escapen. Het eerder gegeven voorbeeld "bleh.\n[" wordt dan "bleh\.\\n\\[". Bestaat zoiets of ben ik gewoon hardop aan het dromen?
En als het niet bestaat en ik met een string replace aan het werk moet, zijn de volgende tekens alle speciale symbolen waar ik op moet letten?
code:
Of zijn er meer? Bepaalde tekens hoef ik geen rekening mee te houden. Bv - welke binnen [ ] wel een speciale betekenis heeft, maar omdat ik [ ] sowieso al escape heeft - geen verdere betekenis.
1
| \ [ ] . ? + * { } ^ $ ( ) |
[ Voor 10% gewijzigd door reyan op 07-06-2006 10:13 ]