[regex] Nederlands mobiel nummer

Pagina: 1
Acties:
  • 908 views sinds 30-01-2008
  • Reageer

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
ik heb een regulier expressie die matched op correct ingevoerde Nederlandse mobiele nummers:
code:
1
/^(\+?31|0)6-?\d{8}/

nu wil ik deze in 1 expressie converteren naar het formaat "31612345678". nou heb ik ergens gelezen dat (?= ... ) wel matched op "..." maar deze niet opneemt in de matchende string. als ik bijvoorbeeld doe:
code:
1
/^(\+?31|0)6-?(?=\d{8})/

dan worden de laatste 8 cijfers niet opgenomen in de match. maar ik wil juist het omgekeerde, namelijk de laatste 8 unieke nummers van een NL mobiel nummer. Zo kan ik er daarna gewoon "316" voorplakken. dus zet ik die (? ... ) om de rest heen:
code:
1
/^(?=(\+?31|0)6-?)\d{8}/

maar dat levert resultaten op die ik niet begrijp. natuurlijk kan het gemakkelijk in 2 of 3 regels, maar het moet toch gewoon mogelijk zijn in 1 B) ?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<pre>
<?
    $a = array( "00612345678", 
                "31612345678", 
                "06-12345678", 
                "44612345678", 
                "+31612345678",
                "+0612345678", 
                "612345678", 
                "0612345678");
                
    $r = "/^(\+?31|0)6-?\d{8}/";
    foreach($a as $s) {
        $m = preg_match($r, $s, $n);
        
        if(count($n) > 0) 

            echo $s.":\t".$n[0]."\n";
        else
            echo $s.":\tno match\n";
    }
?>
</pre>


output:
code:
1
2
3
4
5
6
7
8
00612345678:    no match
31612345678:    31612345678
06-12345678:    06-12345678
44612345678:    no match
+31612345678:   +31612345678
+0612345678:    no match
612345678:  no match
0612345678: 0612345678

[ Voor 17% gewijzigd door Genoil op 15-09-2004 21:56 ]


  • Limhes
  • Registratie: Oktober 2001
  • Laatst online: 13-12 18:24
Werkt dit niet gewoon:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<pre>
<?
    $a = array( "00612345678", 
                "31612345678", 
                "06-12345678", 
                "44612345678", 
                "+31612345678",
                "+0612345678", 
                "612345678", 
                "0612345678");
                
    $r = "/^(\+?31|0)6-?(\d{8})/"; /* hier dus gewoon haakjes toevoegen */
    foreach($a as $s) {
        $m = preg_match($r, $s, $n);
        
        if(count($n) > 0) 

            echo $s.":\t".$n[2]."\n"; /* hier de laatste match pakken */
        else
            echo $s.":\tno match\n";
    }
?>
</pre>

?

Werkt bij mij...

[ Voor 42% gewijzigd door Limhes op 15-09-2004 22:14 ]


  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
oja, dat had je ook nog :P
thx! :)