falcao544 11 Denunciar post Postado Outubro 21, 2010 Olá pessoal acabei de aprender o básico de RegEx, mas o problema é que aprendi o POSIX, mas vi no php.net que o POSIX na versão do PHP que eu estou usando não é aceita, tenho que usar PCRE! Aí surgiram algumas dúvidas! São elas: -Toda vez que eu for escrever o padrão eu tenho que colocar no início um /, ~ ou # e no fim também? -Quando eu coloco ^(.+)\.a$ significa que a string tem que terminar em "a" certo? mas se eu colocar ^(.+)\.(a)$ significa que logo depois do ponto tem que vir um "a", mas não significa que a string tenha que terminar em a certo? -É obrigatório colocar um modificador? Se eu colocar i é a mesma coisa que eregi, pois vira case-insensitive? Valeu pessoal! Pessoal aproveitando o o tópico, estou com problemas em uma RegEx! Olhem por favor: <?php if(!preg_match('/^(http://)$/i', $endereco)){ ?> Está acusando esse erro: Warning: preg_match() [function.preg-match]: Unknown modifier '/' in /home/linkisit/public_html/redireciona.php on line 15 Valeu! EDIT: Problema resolvido! Foi so adicionar \ antes do // do http! mas o problema agora é que ele sempre fala que nao achou o http! mesmo eu digitando! olhem: <?php if(!preg_match('/^(http:\/\/)$/i', $endereco)){ echo"Nao achei o http!"; } else{ echo"achei o http!"; } ?> Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Outubro 21, 2010 Se não estou enganado, é por causa do cifrão, que representa o final da sentença. Essa ER vai casar apenas com auilo que começar e terminar com http://. Para confirmar, experiemente colocar um (.*?) depois das barras escapadas. Mas... Por que usar uma ER para fazer esse tipo de verificação se com strpos() é muito mais rápido? Compartilhar este post Link para o post Compartilhar em outros sites
André D. Molin 15 Denunciar post Postado Outubro 21, 2010 -Toda vez que eu for escrever o padrão eu tenho que colocar no início um /, ~ ou # e no fim também? Sim, a expressão deve ser delimitada por algum desses caracteres. -Quando eu coloco ^(.+)\.a$ significa que a string tem que terminar em "a" certo? Ela tem que terminar com a string literal '.a', e como utilizou o '+' (tem-que-ter), a sua string só irá casar se tiver algo antes do '.a'. Por exemplo, <?php $pattern = '/^(.+)\.a$/'; $subject = '.a'; var_dump( (bool) preg_match( $pattern, $subject ) ); irá retornar false. mas se eu colocar ^(.+)\.(a)$ significa que logo depois do ponto tem que vir um "a", mas não significa que a string tenha que terminar em a certo? Não mudou em nada em relação ao padrão anterior. -É obrigatório colocar um modificador? Não. Se eu colocar i é a mesma coisa que eregi, pois vira case-insensitive? Sim. Warning: preg_match() [function.preg-match]: Unknown modifier '/' in /home/linkisit/public_html/redireciona.php on line 15 Você deve escapar qualquer caractere que não esteja para ser representado pelo seu valor literal. A barra é um exemplo, por isso você deve escapar com uma barra invertida. if(!preg_match('/^(http:\/\/)$/i', $endereco)){ EDIT Putz, você editou seu post umas 3 vezes enquanto eu postava hehe. mas o problema agora é que ele sempre fala que nao achou o http! mesmo eu digitando! É exatamente o que Bruno disse no post dele, sobre o cifrão. Compartilhar este post Link para o post Compartilhar em outros sites
falcao544 11 Denunciar post Postado Outubro 21, 2010 Valeu pessoal pelas respostas! E Bruno teria problema se eu apenas retirasse o $? E eu editei 3 vezes mesmo Andre (: EDIT: Bruno retirei e funcionou mas isso é meio que gambiarra? Pode trazer problemas futuros? Valeu! Esse meu Espressões doe XD se der pra mudar aí eu agradeço! Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Outubro 21, 2010 Não vai trazer problema porque TUDO aquilo que passar por essa ER e começar com http://, sem o cifrão já vai casar. Não importa o que haja na frente e aí sim pode trazer problema, pois se você só verificar o HTTP Scheme, sem validar a URL por inteiro, permitirá que QUALQUER coisa que passe pelo começo dela seja aceita. Compartilhar este post Link para o post Compartilhar em outros sites
falcao544 11 Denunciar post Postado Outubro 21, 2010 Valeu bruno! E que como ainda estou desenvolvendo isso não me preocupei em validar as URL's! Vou fazer a validação de um modo diferente, vou usar Ajax para puxar uma RegEx desse ou de outro arquivo para validar a URL e vou usar cURL para ver se o site tá funcionando! Mais uma vez valeu! Compartilhar este post Link para o post Compartilhar em outros sites