Regular Expressions
Skrifað af Birkir Rafn Guðjónsson þann 16. desember 2007 - 17:35
6 athugasemdir skrifaðar - toppur / botn
Fjöldi lestra: 1803
Regular expressions er notað í mörgum forritunartungumálum svo sem ASP, PHP +(Pearl), Pear, C++ og fleirra.
Þessir demo RE geta validate-að kennitölu, email, iptölu og mánuði.

Demo:
http://benzincrew.com/php/
 1 |
 2 |
 3 |
 4 |
 5 |
 6 |
 7 |
 8 |
 9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
<?php

/**
 * @author Birkir Rafn Guðjónsson
 * @copyright 2007
**/


# IP Fang
$finna '/^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$/i';
$strengur '127.0.0.1';


# Kennitala
$finna '/^[0-3]+[1-9]+[0-1]+[1-9]+[0-9]{2}-?+[0-9]{4}$/i';
$strengur '010100-1111'# Eða 0101001111


# Mánuðir
$finna '/^(?:J(anúar|ú(n|l)í)|Febrúar|Ma(rs|í)|Apríl|Ágúst|(((Sept|Nóv|Des)em)|Októ)ber)$/i';
$strengur 'Júní';


# EMail
$finna '/^[a-zA-Z0-9]+@[a-zA-Z0-9]+.[a-z]{2,6}$/i';
$strengur 'starionturbo@benzincrew.com';



# Athugum hvort strengur sé réttur í samræmi við regex
if(preg_match($finna,$strengur)){
    echo 
'Gilt';
}else{
    echo 
'Ekki gilt';
}

?>



31. desember 2007 - 14:44
#1 - Tómas
http://ms.tomasarnason.com
Það er ekki nóg að athuga lengd kennitölu, það þarf líka að framkvæma vartölucheck á kennitölunni til þess að vera 100% viss um að hér sé um kennitölu að ræða. ;P
Validate-ar email regexið email með mörgum punktum ?
$string = "tomas.arnason@mac.com";
if (preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/',$string))
{
echo "Email gilt";
}


Stytti IP regexið aðeins
$string = "255.255.255.0";
if (preg_match('^(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:[.](?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}$',$string))
{
\t echo "IP er gild";
}

22. janúar 2008 - 09:34
#2 - Kristinn
Ég prófaði kennitölu validate-inn og það fóru 10% af kennitölunum af skrá. Samt fullkomlega löglegar. Hér er hann aðeins breyttur, en hann á að virka.

$finna = '/^[0-3]+[0-9]+[0-9]+[0-9]+[0-9]{2}-?+[0-9]{4}$/i';

Leiðréttið mig ef hann er vitlaus :)

23. apríl 2010 - 19:06
#3 - Svavar Kjarrval
Einnig er hægt að nota filter_var() fallið fyrir IP tölur og netföng.

Kennitölur ætti að fara í gegnum vartöluprófun og ég mæli ekki með því að nota regex í verkið. Enginn kóðanna sem eru hérna gera ráð fyrir kennitölum fyrirtækja. Einnig eru mánuðir eins og 18 fullgildir skv. þessu regexi sem þið settuð hingað. Regex væri samt hægt að nota til að staðfesta að eingöngu séu um tölur að ræða og af ákveðinni lengd. t.d. með [\d]{6}[-]?[\d]{4} eða [\d]{10} ef bandstrik eru ekki leyfð (ekki prófað).

Fyrir mánuði mæli ég alls ekki með regex. Þótt textinn taki minna pláss í kóðanum er hér á ferðinni óþarfa vinnsla. Ef ætlunin er að taka við inntaki frá notendum er betra að þeir slái inn tölur eða hreinlega velji mánuðina sem skilast síðan inn sem tölur.

23. nóvember 2010 - 12:41
#4 - Arnar
http://arnarg.is
E-mail req-exp gerir ekki ráð fyrir undirstriki, striki eða punkti.

7. desember 2010 - 13:12
#5 - Einar Ólafsson
http://einarolafsson.com
Hefur einhver náð að gera kennitölu regex fyrir javascript?

Mér er þvi miður ekki að takast það vel sjálfur. Hef ekki ennþá tekist að skilja regex nægilega vel.

8. desember 2010 - 03:09
#6 - Gaui
http://www.gaui.is
Hvað með bara...

function valid_kt (val){
var pattern = /^[0-9]{6}\-?[0-9]{3}\9$/;
return val.match(pattern);
}




Nafn:


Netfang:


Veffang:


Hvað er tólf plús einn?



Skilaboð: