Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

SnakeX

Validar Domínio com RegEx

Recommended Posts

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

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

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

@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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.