Y a-t-il un moyen simple dans C # pour tester si une expression régulière est une expression régulière? En d'autres termes, je voudrais vérifier si un modèle de regex fourni par l'utilisateur est mal formé ou non. Ceci est purement un test de syntaxe et non ce que la regex est censée atteindre / tester. Merci p>
3 Réponses :
Vous pouvez essayer de le transmettre au constructeur de regex et potentiel de capture argumentException qui est lancée si l'argument est une expression régulière mal formée. p>
Voici un exemple de C # Online .NET qui utilise des exceptions : p>
EDIT: P>
Enlevé le code pour respecter les propriétaires de droits d'auteur, au cas où. Cliquez simplement sur le lien ci-dessus pour le voir. P>
Je dois dire que cela ne sonne pas bien. Le sous-ensemble extrêmement petit des utilisateurs d'ordinateurs qui serait capable de saisir correctement une regex devrait probablement également être approuvé pour interpréter le message d'exception correctement. Essayer de valider leur entrée et que le fait de se tromper serait des motifs suffisants pour qu'ils puissent passer à peu près fou et désinstaller votre programme. P>
Si les programmeurs expérimentés ne sont pas réellement votre client cible, assurez-vous d'éviter les regex. p>
Dites-vous que l'application ne doit pas gérer l'exception? (qui le ferait-il de terminer)? Cela me semble encore pire.
Je suis d'accord, mais malheureusement, je ne peux pas modifier les exigences. Ceci est utilisé pour un moteur de règles d'entreprise configurable par l'utilisateur et la regex n'est utilisé que pour couvrir certains cas de bord potentiels.
@zoman - Wow, ça ne sonne pas bien. Les programmes d'affaires ne sont pas entrés par les programmeurs. Ainsi, la nécessité de valider la regex, sans aucun doute. Le mode de défaillance suivant est qu'une regex valide ne filtre tout simplement pas correctement, mais ce n'est pas le problème de votre équipe. Le bonheur du client est toujours zéro. Montrez ce message à votre architecte d'astronaute, c'est tout ce que je peux faire. Bonne chance.
Avec une expression régulière * Smug Regard sur le visage *
Sérieusement, pourquoi cette question a-t-elle 8 obstacles? La documentation indique clairement qu'un
argumentException code> est lancé s'il existe une erreur pour analyser l'expression régulière.@JulianR: La langue d'expression régulière n'est pas elle-même une langue régulière. Vous avez besoin d'au moins un automate de poussée pour reconnaître une regexp.
@ERIC LIPPERT - J'étais facetieuse :)
@Cory: Peut-être parce que de compter sur la manipulation des exceptions pour le flux de contrôle est une mauvaise pratique de programmation. Si vous peut i> éviter une exception, vous devrait i>, en particulier lors de la validation des données fournies par l'utilisateur. Des exceptions doivent être utilisées pour des circonstances exceptionnelles i> et un utilisateur faisant une faute de frappe n'est pas exceptionnel i>.
@ERIC: Ne pas être en désaccord avec vous là-bas, mais ce fait ne fait pas cette question, comme demandé, un «utile», qui est le point de vote que je pensais. Au moins c'est mon avis.