(Inter)nationaal telnr. regex
Ik ben opzoek naar een regex waarmee ik zowel nationale als internationale telefoonnummers kan valideren. Wat moet toegestaan worden:
0735941234
0031735941234
+31735941234
Maar er moet niet op de lengte gecontroleerd worden, aangezien de lengte van een telefoonnummer kan verschillen in verschillende landen.
Iemand die me hiermee kan helpen?
Groet
Newb
Gewijzigd op 01/01/1970 01:00:00 door PHP Newbie
Bumpje :-)
[0|00|\+][31]?[0-9]+
Wanneer het nummer start met +31 of 0031 dan moet de lengte 12 respectievelijk 13 cijfers zijn.
Start het nummer met + of met 00 dan moet het getal daaropvolgend groter zijn dan 0.
Start het nummer met + of met 00 maar is het niet +31 of 0031 dan moet de minimale lengte 7 cijfers zijn.
Code (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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?php
echo valideer_telefoonnummer('+31/735 94 12 34').'<br />';
echo valideer_telefoonnummer('0031 735.94.12.34').'<br />';
echo valideer_telefoonnummer('0735941234').'<br />';
function valideer_telefoonnummer($nummer)
{
$karakters = ' 0123456789+';
$lengte = strlen($nummer);
$resultaat = '';
$minimaal = 7;
for ($i = 0; $i < $lengte; $i++)
{
// spaties, punten, "/",... en andere karakters worden genegeerd
if ( strpos($karakters, $nummer{$i}, 0) > 0)
{
$resultaat = $resultaat . $nummer{$i};
}
}
$lengte = strlen($resultaat);
$type = ''; // internationaal / plus / nationaal
if ( substr($resultaat,0,1) == '+')
{
$type = 'plus';
}
elseif ( substr($resultaat,0,2) == '00')
{
$type = 'internationaal';
}
elseif ( substr($resultaat,0,1) == '0')
{
$type = 'nationaal';
}
else
return false;
$land = 31; // default: Nederland
$rest = '';
switch ($type)
{
case 'plus':
$land = substr($resultaat,1,2);
if ( substr($resultaat,3,1) == '0')
return false;
$rest = substr($resultaat,3 );
break;
case 'internationaal':
$land = substr($resultaat,2,2);
if ( substr($resultaat,4,1) == '0')
return false;
$rest = substr($resultaat,4 );
break;
case 'nationaal':
$rest = substr($resultaat,1 );
break;
}
switch ($land) // voel je vrij om dit zelf uit te breiden
{
case '31': // Nederland
case '32': // België
if (strlen($rest) == 9)
return true;
break;
default:
if (strlen($rest) >= $minimaal)
return true;
break;
}
return false;
}
?>
echo valideer_telefoonnummer('+31/735 94 12 34').'<br />';
echo valideer_telefoonnummer('0031 735.94.12.34').'<br />';
echo valideer_telefoonnummer('0735941234').'<br />';
function valideer_telefoonnummer($nummer)
{
$karakters = ' 0123456789+';
$lengte = strlen($nummer);
$resultaat = '';
$minimaal = 7;
for ($i = 0; $i < $lengte; $i++)
{
// spaties, punten, "/",... en andere karakters worden genegeerd
if ( strpos($karakters, $nummer{$i}, 0) > 0)
{
$resultaat = $resultaat . $nummer{$i};
}
}
$lengte = strlen($resultaat);
$type = ''; // internationaal / plus / nationaal
if ( substr($resultaat,0,1) == '+')
{
$type = 'plus';
}
elseif ( substr($resultaat,0,2) == '00')
{
$type = 'internationaal';
}
elseif ( substr($resultaat,0,1) == '0')
{
$type = 'nationaal';
}
else
return false;
$land = 31; // default: Nederland
$rest = '';
switch ($type)
{
case 'plus':
$land = substr($resultaat,1,2);
if ( substr($resultaat,3,1) == '0')
return false;
$rest = substr($resultaat,3 );
break;
case 'internationaal':
$land = substr($resultaat,2,2);
if ( substr($resultaat,4,1) == '0')
return false;
$rest = substr($resultaat,4 );
break;
case 'nationaal':
$rest = substr($resultaat,1 );
break;
}
switch ($land) // voel je vrij om dit zelf uit te breiden
{
case '31': // Nederland
case '32': // België
if (strlen($rest) == 9)
return true;
break;
default:
if (strlen($rest) >= $minimaal)
return true;
break;
}
return false;
}
?>
Test het zelf eens grondig. Misschien heb ik iets over het hoofd gezien.
Gewijzigd op 01/01/1970 01:00:00 door Emmanuel Delay
Wauw Emmanuel. Heel erg bedankt. Ik ga er vanavond eens mee stoeien!
valideer_telefoonnummer('+31/735 a94b 12c 34');
zou ook een true geven.
Het zou waarschijnlijk beter zijn om een aantal ignore karakters te definiëren, zoals " ", ".", "/".
EDIT:
Waarschijnlijk is dit beter:
Code (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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<?php
echo valideer_telefoonnummer('+31/735 foute karakters94 12 34').'<br />';
echo valideer_telefoonnummer('+31/735 94 12 34').'<br />';
echo valideer_telefoonnummer('0031 735.94.12.34').'<br />';
echo valideer_telefoonnummer('0735941234').'<br />';
function valideer_telefoonnummer($nummer)
{
$nummer = trim($nummer);
$karakters = ' 0123456789+';
$ignoreKarakters = ' ./';
$lengte = strlen($nummer);
$resultaat = '';
$minimaal = 7;
for ($i = 0; $i < $lengte; $i++)
{
// spaties, punten, "/",... en andere karakters worden genegeerd
if ( strpos($karakters, $nummer{$i}, 0) > 0)
{
if ($i>0 && $nummer{$i} =='+')
return false;
$resultaat = $resultaat . $nummer{$i};
}
elseif ( strpos($ignoreKarakters, $nummer{$i}, 0) === false)
{
return false;
}
}
$lengte = strlen($resultaat);
$type = ''; // internationaal / plus / nationaal
if ( substr($resultaat,0,1) == '+')
{
$type = 'plus';
}
elseif ( substr($resultaat,0,2) == '00')
{
$type = 'internationaal';
}
elseif ( substr($resultaat,0,1) == '0')
{
$type = 'nationaal';
}
else
return false;
$land = 31; // default: Nederland
$rest = '';
switch ($type)
{
case 'plus':
$land = substr($resultaat,1,2);
if ( substr($resultaat,3,1) == '0')
return false;
$rest = substr($resultaat,3 );
break;
case 'internationaal':
$land = substr($resultaat,2,2);
if ( substr($resultaat,4,1) == '0')
return false;
$rest = substr($resultaat,4 );
break;
case 'nationaal':
$rest = substr($resultaat,1 );
break;
}
switch ($land) // voel je vrij om dit zelf uit te breiden
{
case '31': // Nederland
case '32': // België
if (strlen($rest) == 9)
return true;
break;
default:
if (strlen($rest) >= $minimaal)
return true;
break;
}
return false;
}
?>
echo valideer_telefoonnummer('+31/735 foute karakters94 12 34').'<br />';
echo valideer_telefoonnummer('+31/735 94 12 34').'<br />';
echo valideer_telefoonnummer('0031 735.94.12.34').'<br />';
echo valideer_telefoonnummer('0735941234').'<br />';
function valideer_telefoonnummer($nummer)
{
$nummer = trim($nummer);
$karakters = ' 0123456789+';
$ignoreKarakters = ' ./';
$lengte = strlen($nummer);
$resultaat = '';
$minimaal = 7;
for ($i = 0; $i < $lengte; $i++)
{
// spaties, punten, "/",... en andere karakters worden genegeerd
if ( strpos($karakters, $nummer{$i}, 0) > 0)
{
if ($i>0 && $nummer{$i} =='+')
return false;
$resultaat = $resultaat . $nummer{$i};
}
elseif ( strpos($ignoreKarakters, $nummer{$i}, 0) === false)
{
return false;
}
}
$lengte = strlen($resultaat);
$type = ''; // internationaal / plus / nationaal
if ( substr($resultaat,0,1) == '+')
{
$type = 'plus';
}
elseif ( substr($resultaat,0,2) == '00')
{
$type = 'internationaal';
}
elseif ( substr($resultaat,0,1) == '0')
{
$type = 'nationaal';
}
else
return false;
$land = 31; // default: Nederland
$rest = '';
switch ($type)
{
case 'plus':
$land = substr($resultaat,1,2);
if ( substr($resultaat,3,1) == '0')
return false;
$rest = substr($resultaat,3 );
break;
case 'internationaal':
$land = substr($resultaat,2,2);
if ( substr($resultaat,4,1) == '0')
return false;
$rest = substr($resultaat,4 );
break;
case 'nationaal':
$rest = substr($resultaat,1 );
break;
}
switch ($land) // voel je vrij om dit zelf uit te breiden
{
case '31': // Nederland
case '32': // België
if (strlen($rest) == 9)
return true;
break;
default:
if (strlen($rest) >= $minimaal)
return true;
break;
}
return false;
}
?>
Gewijzigd op 01/01/1970 01:00:00 door Emmanuel Delay
Het is niet de snelste manier, maar hij doet exact wat hij moet doen. Geweldig :-)