2009-07-24 9 views
0

J'ai écrit l'expression régulière suivante. Il doit correspondre uniquement aux noms de fichiers ou de dossiers qui ne se terminent pas par .aspx.Problèmes avec l'expression régulière suivante dans le contrôle RegularExpressionValidator

ValidationExpression=".*[^(\.aspx)]$" 

Mais cela ne fonctionne pas. Alors, rois de la terre RegEx, aidez s'il vous plaît. Je voudrais aussi invalider des extensions telles que .Aspx, .aSPx etc. (j'ai rapidement appris qu'il y a quelques différences entre la façon dont .net et JScript traitent les expressions régulières).

Quelqu'un peut-il aider?

+0

de ce que je peux dire cela correspond juste que le dernier élément de la ligne est a, s, p, x ou a. – ewanm89

+0

Non. Il correspond à un caractère qui n'est pas l'un des suivants: (. A s p x) –

Répondre

2

[^abc] signifie « match d'un caractère à l'exception a, b, ou.. Vous ne voulez pas une classe de caractères niée, vous voulez un lookbehind négatif:

ValidationExpression=".*(?<!\.aspx)$" 

Utilisez RegexOptions.IgnoreCase comme une option dans Regex.IsMatch pour le rendre insensible à la casse.

En JavaScript, où il n'y a pas lookbehind négatif, vous pouvez utiliser une version moins efficace avec préanalyse négative:

ValidationExpression="^(?:(?!\.aspx$).)*$" 
+0

Est-ce que cela fonctionne aussi avec le script java? –

+0

Non. JavaScript ne supporte pas lookbehind. Vous pourriez plutôt affirmer que. * \. Aspx $ ne correspond pas à votre chaîne. –

+0

J'essaie de m'échapper simplement en définissant ValidationExpression. –

0

Le problème que vous avez est que vous utilisez une classe de caractères, de sorte que vous avez spécifié que le dernier caractère ne peut pas être « (» ou « \ » ou « » ou « un », etc.

Vous avez besoin d'un regard négatif derrière, donc quelque chose comme:

".*(?<!\.aspx)$" 

Voir here pour plus de détails La syntaxe peut être légèrement différent dans ASP

0

Comme Al souligné, vous êtes correspondant à une classe de caractères au lieu de « .aspx » . La regex que vous cherchez est:

.*(?<!.aspx$) 
+0

Si j'utilise ceci, je reçois une exception de javascript, quand il essaie d'utiliser l'expression régulière. –

Questions connexes