Una Expresión regular, también llamada patrón, es una forma de representar a los lenguajes regulares (finitos o infinitos) y se construye utilizando caracteres del alfabeto sobre el cual se define el lenguaje.
Este articulo lo encontre en RoughGuideToPhp.com y tiene una lista con 10 expresiones regulares mas usadas con PHP en nuestros proyectos.
- Validar Nombre de usuario
- Validar Dirección Email
- Validar Fecha
- Validar Dirección IP
- Validar Numero de Telefono
- Validar Numero de tarjeta de credito
- Remplazar Url por un link
- Limpiar palabras groseras
- Eliminar código Javascript
- Remplazar BBCode por HTML
1. Validar Nombre de usuario
Esta validación sigue las siguientes reglas:
- Un nombre de usuario debe empezar con un minúsculas o mayúsculas carta
- Un usuario sólo puede contener letras, números o pone de relieve
- Un nombre de usuario debe tener entre 8 y 24 caracteres
- Un usuario no puede terminar en un guión bajo
[php]
function validarUsuario($nombre)
{
return preg_match("#^[a-z][da-z_]{6,22}[a-zd]$#i", $nombre);
}
//ejm:
if(validarUsuario("nombreUsuario"))
{
echo "usuario valido";
}
else
{
echo "usuario invalido";
}
[/php]
2. Validar Dirección Email
Aquí un ejemplo general para validar un email.
[php]
function validarEmail($email)
{
$reg = "#^(((([a-zd][.-+_]?)*)[a-z0-9])+)@(((([a-zd][.-_]?){0,62})[a-zd])+).([a-zd]{2,6})$#i";
return preg_match($reg, $email);
}
//ejm:
if(validarEmail("cesar@gmail.com"))
{
echo "email valido";
}
else
{
echo "email invalido";
}
[/php]
3. Validar Fecha
Esta validación acepta la fecha en formato DD-MM-YYYY, con separadores (/),(-) y (.);
[php]
function validarFecha($fecha){
$sep = "[/-.]";
$req = "#^(((0?[1-9]|1d|2[0-8]){$sep}(0?[1-9]|1[012])|(29|30){$sep}(0?[13456789]|1[012])|31{$sep}(0?[13578]|1[02])){$sep}(19|[2-9]d)d{2}|29{$sep}0?2{$sep}((19|[2-9]d)(0[48]|[2468][048]|[13579][26])|(([2468][048]|[3579][26])00)))$#";
return preg_match($reg, $fecha);
}
//ejm:
if(validarFecha("12/01/2009"))
{
echo "fecha valida";
}
else
{
echo "fecha invalida";
}
[/php
<h3 id="validar_ip">4. Validar Dirección IP </h3>
<p>Valida que una dirección IP este dentro del rango 0.0.0.0 a 255.255.255.255</p>
[php]
function validarIP($ip)
{
$val_0_to_255 = "(25[012345]|2[01234]d|[01]?dd?)";
$reg = "#^($val_0_to_255.$val_0_to_255.$val_0_to_255.$val_0_to_255)$#";
return preg_match($reg, $ip, $matches);
}
//ejm:
if(validarIP("192.168.1.1"))
{
echo "IP valida";
}
else
{
echo "IP invalida";
}
[/php]
5. Validar Numero de Telefono
El formato utilizado seria así: 000 000 0000,(000)-000-0000. Donde los primeros 3 números serian el código de tu País.
[php]
function validarTelefono($numero)
{
$reg = "#^(?d{3})?[s.-]?d{3}[s.-]?d{4}$#";
return preg_match($reg, $numero);
}
//ejm:
if(validarTelefono("(511)-311-4541"))
{
echo "telefono valido";
}
else
{
echo "telefono invalido";
}
[/php]
6. Validar Numero de tarjeta de credito
Al realizar una aplicación de comercio electrónico es muy importante validar los distintos tipos de tarjetas de credito que hay, esta es una simple función para validarla, solo tiene que llamar a la función getTipoTarjeta(«4111 1111 1111 1111»);
[php]
function validarTarjeta($num_tarjeta)
{
$num_tarjeta = preg_replace("/D|s/", "", $num_tarjeta);
$length = strlen($num_tarjeta);
$parity = $length % 2;
$sum=0;
for($i=0; $i<$length; $i++)
{
$digit = $num_tarjeta[$i];
if ($i%2==$parity) $digit=$digit*2;
if ($digit>9) $digit=$digit-9;
$sum=$sum+$digit;
}
return ($sum%10==0);
}
function getTipoTarjeta($cc)
{
$cards = array(
"visa" => "(4d{12}(?:d{3})?)",
"amex" => "(3[47]d{13})",
"jcb" => "(35[2-8][89]ddd{10})",
"maestro" => "((?:5020|5038|6304|6579|6761)d{12}(?:dd)?)",
"solo" => "((?:6334|6767)d{12}(?:dd)?d?)",
"mastercard" => "(5[1-5]d{14})",
"switch" => "(?:(?:(?:4903|4905|4911|4936|6333|6759)d{12})|(?:(?:564182|633110)d{10})(dd)?d?)",
);
$names = array("Visa", "American Express", "JCB", "Maestro", "Solo", "Mastercard", "Switch");
$matches = array();
$pattern = "#^(?:".implode("|", $cards).")$#";
$result = preg_match($pattern, str_replace(" ", "", $cc), $matches);
if($result > 0)
{
$result = (validarTarjeta($cc))?1:0;
}
return ($result>0)?$names[sizeof($matches)-2]:false;
}
//ejm:
echo getTipoTarjeta("4111 1111 1111 1111");
[/php]
7. Remplazar Url por un link
En foros es muy utilizado la función para reemplazar simples direcciones web por enlaces HTML.
[php]
function convertirURL($url)
{
$host = "([a-zd][-a-zd]*[a-zd].)+[a-z][-a-zd]*[a-z]";
$port = "(:d{1,})?";
$path = "(/[^?<>#"s]+)?";
$query = "(?[^<>#"s]+)?";
$reg = "#((ht|f)tps?://{$host}{$port}{$path}{$query})#i";
return preg_replace($reg, "<a href=’$1’>$1</a>", $url);
}
//ejm:
echo convertirURL(" visita http://www.google.com");
[/php]
8. Limpiar palabras groseras
Esta expresión regular filtra las palabras groseras que algunos de nuestros usuarios podrían poner.
[php]
function deswear($string){
function prep_regexp_array(&$item){
$item = "#$item#i";
}
function stars($matches){
return substr($matches[0], 0, 1).str_repeat("*", strlen($matches[0])-1);
}
$swears = array("idiota", "invecil");
array_walk($swears, "prep_regexp_array");
return preg_replace_callback($swears, "stars", $string);
}
//ejm:
echo deswear("marcianito es un idiota");
[/php]
9. Eliminar código Javascript
[php]
function limpiarTags($source, $tags = null)
{
function clean($matched)
{
$attribs =
"javascript:|onclick|ondblclick|onmousedown|onmouseup|onmouseover|".
"onmousemove|onmouseout|onkeypress|onkeydown|onkeyup|".
"onload|class|id|src|style";
$quot = ""|’|`";
$stripAttrib = "’ ($attribs)s*=s*($quot)(.*?)(\2)’i";
$clean = stripslashes($matched[0]);
$clean = preg_replace($stripAttrib, », $clean);
return $clean;
}
$allowedTags=’<a><br><b><i><br><li><ol><p><strong><u><ul>’;
$clean = strip_tags($source, $allowedTags);
$clean = preg_replace_callback(‘#<(.*?)>#’, "clean", $source);
return $source;
}
//ejm:
echo limpiarTags("este código es malicioso <script>alert(‘hola!’)</script>");
[/php]
10. Remplazar BBCode por HTML
BBCode(Bulletin Board Code) es una manera simple de realizar nuestra propia norma de etiquetas en nuestra web, en vez de etiquetar con código HTML(<strong>) escribiremos [strong] y nuestra función la reemplazara a momento de visualizarla por etiquetas HTML.
[php]
function convertirBBcode($string)
{
$string = strip_tags($string);
$patterns = array(
"bold" => "#[b](.*?)[/b]#is",
"italics" => "#[i](.*?)[/i]#is",
"underline" => "#[u](.*?)[/u]#is",
"link_title" => "#[url=(.*?)](.*?)[/url]#i",
"link_basic" => "#[url](.*?)[/url]#i",
"color" => "#[color=(red|green|blue|yellow)](.*?)[/color]#is"
);
$replacements = array(
"bold" => "<b>$1</b>",
"italics" => "<i>$1</i>",
"underline" => "<u>$1</u>",
"link_title" => "<a href="$1">$2</a>",
"link_basic" => "<a href="$1">$1</a>",
"color" => "<span style=’color:$1;’>$2</span>"
);
return preg_replace($patterns, $replacements, $string);
}
//ejm:
echo convertirBBcode("[b]letra negrita[/b]");
[/php]
Excelente artículo. Lo agrego a mis favoritos 😛
muy bien los ejemplos y comentarios, me gustaria que escriban sobre funciones JS
Saludos Cordiales
El de remplazar una URL por link no funciona :/
Muchas gracias por el aporte! Muy Útil!
Comments are closed.