J'essaie de définir une expression rationnelle qui vérifiera le début d'une chaîne, et si elle contient l'une http://
ou l' autre, https://
elle doit correspondre.
Comment puis je faire ça? J'essaie ce qui suit qui ne fonctionne pas:
^[(http)(https)]://
[]
. Il mach un caractère qui est soit(
,)
,h
,t
,t
,p
ous
. C'est à dire qu'il correspondraits://
mais pasht://
oux://
./^x/
vsindexOf(x) == 0
). Les approches de style "commence par" peuvent avoir moins de frais généraux, mais je soupçonne que cela importe rarement - choisissez ce qui est le plus propre, ce qui peut très bien être:x.StartWith("http://") || x.StartsWith("https://")
- mais faites-le par clarté du code, pas pour tenter d'améliorer les performances, sauf si cela est justifié par analyse et exigences :-)Réponses:
Votre utilisation de
[]
est incorrecte - notez que cela[]
dénote une classe de caractères et ne correspondra donc qu'à un seul caractère. L'expression se[(http)(https)]
traduit par "correspondre à a(
, anh
, at
, at
, ap
, a)
ou ans
". (Les caractères en double sont ignorés.)Essaye ça:
Si vous voulez vraiment utiliser l'alternance, utilisez plutôt cette syntaxe:
la source
^https?:\/\/
. Ai-je raison?/
n'est pas un caractère spécial dans les expressions régulières, uniquement dans les langues où/
est utilisé pour noter une expression régulière littérale. Par exemple, il n'est pas nécessaire de s'échapper/
dans les expressions régulières lorsque vous utilisez C #, car les expressions régulières C # sont exprimées (en partie) sous forme de littéraux de chaîne. Vous n'avez pas non plus besoin d'eux dans, disons, Perl (lorsque vous utilisez un délimiteur alternatif comme dansm#^https?://#
). Donc, pour répondre directement à votre commentaire: (a) Non, je n'ai pas oublié d'échapper à quoi que ce soit. (b) Vous devrez échapper aux personnages traités spécialement dans la langue de votre choix.Insensible à la casse:
la source
Vous devrez peut-être échapper aux barres obliques, selon le contexte.
la source
^https?:\/\/(.*)
où(.*)
correspond tout le reste aprèshttps://
la source
Cela devrait fonctionner
la source
Cela fonctionnera également pour les chaînes codées par URL.
la source
Rendre ce cas insensible ne fonctionnait pas dans asp.net donc je viens de spécifier chacune des lettres.
Voici ce que je devais faire pour le faire fonctionner dans un asp.net RegularExpressionValidator :
Remarques:
(?i)
et l'utilisation/whatever/i
n'a pas fonctionné probablement parce que javascript n'a pas apporté toutes les fonctionnalités sensibles à la casse^
au début, mais cela n'avait pas d'importance, mais le(.*)
faisait (l'expression ne fonctionnait pas sans(.*)
mais fonctionnait sans^
)//
mais cela pourrait être une bonne idée.Voici le RegularExpressionValidator complet si vous en avez besoin:
la source