Versio

(Inter)nationaal telnr. regex

Overzicht Reageren

PHP Newbie

PHP Newbie

06/09/2008 15:16:00
Quote Anchor link
Heey allemaal,

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
 
PHP hulp

PHP hulp

25/05/2012 04:56:01
Gesponsorde koppelingen:
BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  
 
PHP Newbie

PHP Newbie

08/09/2008 16:57:00
Quote Anchor link
Bumpje :-)
 
Simon

simon

08/09/2008 17:01:00
Quote Anchor link
[0|00|\+][31]?[0-9]+
 
PHP Newbie

PHP Newbie

08/09/2008 18:01:00
Quote Anchor link
Even wat aspecten van een telefoonnummer:

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.
 
Emmanuel Delay

Emmanuel Delay

08/09/2008 18:38:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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;
}


?>


Test het zelf eens grondig. Misschien heb ik iets over het hoofd gezien.
Gewijzigd op 01/01/1970 01:00:00 door Emmanuel Delay
 
PHP Newbie

PHP Newbie

08/09/2008 20:02:00
Quote Anchor link
Wauw Emmanuel. Heel erg bedankt. Ik ga er vanavond eens mee stoeien!
 
Emmanuel Delay

Emmanuel Delay

08/09/2008 20:20:00
Quote Anchor link
Wat wel gebeurt, is dat karakters worden genegeerd.

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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;
}


?>
Gewijzigd op 01/01/1970 01:00:00 door Emmanuel Delay
 
PHP Newbie

PHP Newbie

09/09/2008 16:35:00
Quote Anchor link
Het is niet de snelste manier, maar hij doet exact wat hij moet doen. Geweldig :-)
 



Overzicht Reageren