Estou tentando definir um regexp que irá verificar o início de uma seqüência de caracteres e se ele contém um http://
ou https://
deve corresponder a ele.
Como eu posso fazer isso? Estou tentando o seguinte que não está funcionando:
^[(http)(https)]://
[]
. Ele vai mach um personagem que é ou(
,)
,h
,t
,t
,p
ous
. Ou seja, seria compatível,s://
mas nãoht://
oux://
./^x/
vsindexOf(x) == 0
). As abordagens de estilo "começa com" podem ter menos sobrecarga, mas suspeito que isso raramente importa - escolha o que é mais limpo, o que pode ser muito bom:x.StartWith("http://") || x.StartsWith("https://")
- mas faça isso com clareza de código, não com uma tentativa de melhorar o desempenho, a menos que justificado com análise e requisitos :-)Respostas:
Seu uso de
[]
está incorreto - observe que[]
denota uma classe de personagem e, portanto, sempre corresponderá apenas a um personagem. A expressão se[(http)(https)]
traduz em "corresponder a(
, umh
, at
, at
, ap
, a)
ou as
". (Caracteres duplicados são ignorados.)Tente o seguinte:
Se você realmente deseja usar alternância, use esta sintaxe:
fonte
^https?:\/\/
. Estou certo?/
não é um caractere especial em expressões regulares, apenas em idiomas onde/
é usado para notar uma expressão regular literal. Por exemplo, não é necessário escapar/
em expressões regulares ao usar C #, porque expressões regulares em C # são expressas (em parte) como literais de cadeia de caracteres. Nem você precisa deles, digamos, em Perl (ao usar um delimitador alternativo como emm#^https?://#
). Então, para abordar diretamente seu comentário: (a) Não, não esqueci de escapar de nada. (b) Você precisará escapar dos caracteres tratados especialmente no seu idioma de escolha.Não diferencia maiúsculas de minúsculas:
fonte
Você pode ter que escapar das barras, dependendo do contexto.
fonte
^https?:\/\/(.*)
onde(.*)
é combinar tudo o resto depoishttps://
fonte
Isso deve funcionar
fonte
Isso funcionará também para strings codificadas em URL.
fonte
Como esse caso não era sensível, não estava funcionando no asp.net, então apenas especifiquei cada uma das letras.
Aqui está o que eu fiz para fazê-lo funcionar em um asp.net RegularExpressionValidator :
Notas:
(?i)
e o uso/whatever/i
não funcionou provavelmente porque o javascript não trouxe todas as funcionalidades que diferenciam maiúsculas de minúsculas^
no começo, mas não importava, mas(.*)
funcionou (Expressão não funcionou sem,(.*)
mas funcionou sem^
)//
que poderia ser uma boa ideia.Aqui está o RegularExpressionValidator completo, se você precisar:
fonte