SnakeX 1 Denunciar post Postado Dezembro 27, 2010 Olá, estou a precisar de uma ajuda com expressões regulares :c Eu preciso validar domínios, eu já tenho algum código mas ele não funciona como deveria =\ # Verificar o domínio e o seu TLD... if(count($dominio_partes) == 1): return array('resultado' => 0, 'mensagem' => 'Domínio inválido!'); # Verificar se a TLD é válida! elseif(!array_key_exists($tld, $servidores)): return array('resultado' => 0, 'mensagem' => 'O TLD de Domínio que apresentou `<strong>' . $tld . '</strong>´ não é válido.'); # Verificar se o domínio começa ou termina com algum hifen.. /*elseif(preg_match("/^-|-$/", $sld)): return array('resultado' => 0, 'mensagem' => 'Nomes de Domínio não podem começar ou terminar com um hifén ou conter hifén duplos.'); */ elseif(!preg_match ("/^[a-zA-Z0-9][a-zA-Z0-9\-\_]+[a-zA-Z0-9]$/", $sld)): return array('resultado' => 0, 'mensagem' => 'Nomes de Domínio só podem conter caractéres alfanuméricos e hiféns.'); endif; 1º IF: Eu utilizo um explode para dividir o SLD e o TLD, dai verifico se existem TLD's, senão existirem o domínio é inválido.. 2º IF: Verifico se o TLD existe num array. 3º IF: Ele têm de verificar se o domínio ( SLD ) inicia e / ou termina com algum hifen e se contem duplos hifens.. 4º IF: Neste ultimo if ele faz uma validação geral, mas simplesmente não funciona... O 3º e 4º IF não funcionam, é ai que preciso de ajuda, depois de ter a funcionar o 1º IF vai ser quase desnecessário. Obrigado desde já pelo tempo perdido a ler o post! Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Dezembro 27, 2010 tente assim: elseif ( preg_match( "/^-.+?-$/", $sld ) ) Aqui verifica-se se inicia com -, seguido de qualquer coisa 1 ou mais vezes, e termina com - elseif ( ! preg_match( "/^[a-z0-9][a-z0-9_-]+[a-z0-9]$/i", $sld ) ): usei o modificador "i", tornando a ER case-insensitive tirei os esacapes de _ e -. Até onde me lembro, se quiser usar "-" numa lista, tem que ser no final dela Veja se funciona Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Dezembro 27, 2010 Eu preciso validar domínios, eu já tenho algum código mas ele não funciona como deveria =\ Já procurou utilizar filter_var() ? parse_url() também é interessante, sem contar é claro, dns_get_record() <?php $dominio = 'http://forum.imasters.com.br/index.php?/topic/418812-validar-dominio-com-regex/'; $tlds = array( 'com' , 'net' , 'org' ); if ( filter_var( $dominio , FILTER_VALIDATE_URL ) ){ $parts = parse_url( $dominio ); $matches = array(); if ( preg_match( '/^.+(\.(?<TLD>\w{3,}))(\.(?<ccTLD>\w{2}))?$/' , $parts[ 'host' ] , $matches ) ){ if ( !in_array( $matches[ 'TLD' ] , $tlds ) ){ echo 'TLD inválido'; } var_dump( $matches ); } var_dump( $parts ); var_dump( dns_get_record( $parts[ 'host' ] ) ); } else { echo 'O domínio é inválido'; } A saída do fragmento acima será: array(7) { [0]=> string(21) "forum.imasters.com.br" [1]=> string(4) ".com" ["TLD"]=> string(3) "com" [2]=> string(3) "com" [3]=> string(3) ".br" ["ccTLD"]=> string(2) "br" [4]=> string(2) "br" } array(4) { ["scheme"]=> string(4) "http" ["host"]=> string(21) "forum.imasters.com.br" ["path"]=> string(10) "/index.php" ["query"]=> string(40) "/topic/418812-validar-dominio-com-regex/" } array(1) { [0]=> array(5) { ["host"]=> string(21) "forum.imasters.com.br" ["type"]=> string(1) "A" ["ip"]=> string(11) "74.55.80.69" ["class"]=> string(2) "IN" ["ttl"]=> int(335) } } Agora basta você trabalhar os dados que quiser. ;) Compartilhar este post Link para o post Compartilhar em outros sites
SnakeX 1 Denunciar post Postado Dezembro 27, 2010 @Beraldo - Infelizmente não funcionou, não percebo muito de regex e não estou a conseguir encontrar nada no google para isto =\ @João Batista Neto - Solução interessante, não tinha conhecimento que com o filter_var poderia validar domínios e/ou urls... infelizmente não funciona da forma que pretendo, pois os domínios podem ter - e _ e com o filter_var ele retorna sempre false quando colocamos - e/ou _ :c Se tiverem outra solução agradecia que postassem por favor. Mas mesmo assim obrigado aos dois ;) Edit: @Beraldo - O Afinal o regex funciona, eu é que tinha feito copy paste da variável $sld e no inicio do sld estava um . dai dar sempre inválido LOL Compartilhar este post Link para o post Compartilhar em outros sites