Op zoek naar een goede telefoonnummer check
Ik zoek een telefoonnummer check. Ik heb er 1, maar daarbij ben je verplicht een - in te voeren en dat wil ik echter niet. Weet iemand een goede check die bruikbaar is?
Groet,
Roel
Wat houdt je tegen om die die je nu hebt eens te tonen? Een - uit de validatie halen is voor ons vast geen rocket-science ;-)
Ach, zolang ik maar 14 040 kan kiezen voor plaatselijk ongemak...
Deze gebruik ik nu... Maar ik wil dat men met en zonder - kan invullen.
Groet,
Roel
Of volgens de internationale notatie (+31)?
Of met haakjes rond het kengetal?
Of met spaties?
Ten aanzien van je vraag: controleer (na het verzenden van het formulier) of er een - in staat. Zo ja; verwijder die voor je gaat controleren met preg_match.
Je hebt
- zonder land-prefix: 9 of 10 karakters; beginnende met een 0.
- met bv 0032 ... (eerstvolgende 0 wordt weggelaten) 12 of 13 karakters
- met bv. +32 ... (eerstvolgende 0 wordt weggelaten) 11 of 12 karakters
En misschien hebben jullie in Nederland nog extra formaten?
----
Trouwens; ik zou kiezen voor een systeem waarbij alle vreemde tekens gewoon genegeerd worden. Dan kunnen mensen staties; '/', '-' schrijven hoe veel ze willen. Gewoon negeren.
Gewijzigd op 24/09/2013 11:41:45 door Kris Peeters
(010) 123 45 67
(06) 12 34 56 78
Verder kun je ook in Nederland inmiddels naambellen, bij een servicenummer bijvoorbeeld:
0900 KAAS
Ward van der Put op 24/09/2013 11:45:44:
De officiële Nederlandse notatie gebruikt ronde haakjes rond het netnummer
Dat is een slecht idee.
Nu ja ...
Als ik het goed heb, zijn er tegenwoordig heel erg veel formaten mogelijk.
Probeer daar nog eens het formaat te controleren ...
Begint het nummer met +, dan moet het vervolgens +31 zijn met de landcode voor Nederland gevolgd door 9 cijfers (want de eerste 0 vervalt).
Zoals gezegd, kun je daarmee niet alle nummers afvangen. Vooral zakelijke telefoonnummers wijken af, waaronder 0800- en 0900-servicenummers, 14-nummers voor Nederlandse gemeenten en doorkiesnummers.
Dat is zoals je de lens van je sniper rifle al focussen vooraleer je weet wie je moet neerknallen
dan geef ik weer met deze functie
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
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
<?php
function format_phone($phone){
$kentallen = Array(
'0909','0906','0900','0842','0800','0676','06','010','046','0111','0475','0113','0478','0114','0481','0115','0485','0117','0486','0118','0487','013','0488','015','0492','0161','0493','0162','0495','0164','0497','0165','0499','0166','050','0167','0511','0168','0512','0172','0513','0174','0514','0180','0515','0181','0516','0182','0517','0183','0518','0184','0519','0186','0521','0187','0522','020','0523','0222','0524','0223','0525','0224','0527','0226','0528','0227','0529','0228','053','0229','0541','023','0543','024','0544','0251','0545','0252','0546','0255','0547','026','0548','0294','055','0297','0561','0299','0562','030','0566','0313','0570','0314','0571','0315','0572','0316','0573','0317','0575','0318','0577','0320','0578','0321','058','033','0591','0341','0592','0342','0593','0343','0594','0344','0595','0345','0596','0346','0597','0347','0598','0348','0599','035','070','036','071','038','072','040','073','0411','074','0412','075','0413','076','0416','077','0418','078','043','079','045','0496','0491','0473','0477','09','02', //nederland
'0486', //telenet
'0470','0471','0472','0473','0474','0475','0476','0477','0478','0479', //proximus
'0483','0484','0485','0486','0487','0488','0489', //base
'0490','0491','0492','0493','0494','0495','0496','0497','0498','0499', //mobistar
'067', '053', '03', '063', '050', '02', '071', '060', '083', '052', '013', '082', '086', '089', '09', '011', '014', '085', '057', '056', '064', '016', '061', '04', '015', '065', '081', '058', '054', '067', '059', '051', '055', '080', '012', '069', '014', '087', '058', '019', '010', '050', //Belgie
'070','077','078','0800','0900','0902','0903','0905','0909' //speciale
);
$phone=preg_replace('/[^0-9]/', '', $phone);
if(substr($phone,0,2)=='00' && substr($phone,2,2)=='31')
$phone=preg_replace('/^([0-9]{4})/', '0', $phone);
if(substr($phone,0,2)=='00')
$phone=preg_replace('/^([0-9]{4})([0-9]+)/', '($1) $2', $phone);
for($i=4;$i>=0;$i--)
{
$ken=substr($phone,0,$i);
if(in_array($ken,$kentallen))
break;
}
if ((strlen ($phone)-$i)==6)
{
return preg_replace('/([0-9]{'.$i.'})([0-9]{2})([0-9]{2})([0-9]{2})/', "$1-$2-$3-$4", $phone);
}
else
{
if ((strlen ($phone)-$i)==7)
{
return preg_replace('/([0-9]{'.$i.'})([0-9]{3})([0-9]{2})([0-9]{2})/', "$1-$2-$3-$4", $phone);
}
else
{
return preg_replace('/([0-9]{'.$i.'})([0-9]+)/', "$1-$2-$3-$4", $phone);
}
}
}
?>
function format_phone($phone){
$kentallen = Array(
'0909','0906','0900','0842','0800','0676','06','010','046','0111','0475','0113','0478','0114','0481','0115','0485','0117','0486','0118','0487','013','0488','015','0492','0161','0493','0162','0495','0164','0497','0165','0499','0166','050','0167','0511','0168','0512','0172','0513','0174','0514','0180','0515','0181','0516','0182','0517','0183','0518','0184','0519','0186','0521','0187','0522','020','0523','0222','0524','0223','0525','0224','0527','0226','0528','0227','0529','0228','053','0229','0541','023','0543','024','0544','0251','0545','0252','0546','0255','0547','026','0548','0294','055','0297','0561','0299','0562','030','0566','0313','0570','0314','0571','0315','0572','0316','0573','0317','0575','0318','0577','0320','0578','0321','058','033','0591','0341','0592','0342','0593','0343','0594','0344','0595','0345','0596','0346','0597','0347','0598','0348','0599','035','070','036','071','038','072','040','073','0411','074','0412','075','0413','076','0416','077','0418','078','043','079','045','0496','0491','0473','0477','09','02', //nederland
'0486', //telenet
'0470','0471','0472','0473','0474','0475','0476','0477','0478','0479', //proximus
'0483','0484','0485','0486','0487','0488','0489', //base
'0490','0491','0492','0493','0494','0495','0496','0497','0498','0499', //mobistar
'067', '053', '03', '063', '050', '02', '071', '060', '083', '052', '013', '082', '086', '089', '09', '011', '014', '085', '057', '056', '064', '016', '061', '04', '015', '065', '081', '058', '054', '067', '059', '051', '055', '080', '012', '069', '014', '087', '058', '019', '010', '050', //Belgie
'070','077','078','0800','0900','0902','0903','0905','0909' //speciale
);
$phone=preg_replace('/[^0-9]/', '', $phone);
if(substr($phone,0,2)=='00' && substr($phone,2,2)=='31')
$phone=preg_replace('/^([0-9]{4})/', '0', $phone);
if(substr($phone,0,2)=='00')
$phone=preg_replace('/^([0-9]{4})([0-9]+)/', '($1) $2', $phone);
for($i=4;$i>=0;$i--)
{
$ken=substr($phone,0,$i);
if(in_array($ken,$kentallen))
break;
}
if ((strlen ($phone)-$i)==6)
{
return preg_replace('/([0-9]{'.$i.'})([0-9]{2})([0-9]{2})([0-9]{2})/', "$1-$2-$3-$4", $phone);
}
else
{
if ((strlen ($phone)-$i)==7)
{
return preg_replace('/([0-9]{'.$i.'})([0-9]{3})([0-9]{2})([0-9]{2})/', "$1-$2-$3-$4", $phone);
}
else
{
return preg_replace('/([0-9]{'.$i.'})([0-9]+)/', "$1-$2-$3-$4", $phone);
}
}
}
?>
De code komt wel niet van mij. Ik heb ze wel vervolledigd en vraag me niet meer van wie ze komt. vermoedelijk van deze site.
Jan
Gewijzigd op 24/09/2013 16:24:59 door Jan R
Enkel Nederlanders welkom?
Zet daar ten minste iets als
if(substr($phone,0,2)=='00' && (substr($phone,2,2)=='31' || substr($phone,2,2)=='32'))
Verder lijkt deze code me wel zinnig.
Thanks. ik ga kijken wat ik hiermee kan, of het werkt zoals hun willen :)
Code (php)
1
<input naam="telefoonnummer" type="text" pattern="[\+]\d{2}[\(]\d{2}[\)]\d{4}[\-]\d{4}">
Wat je kan doen is alles behalve nummers weghalen (alle spaties, punten, streepjes etc).
Dan vervang je een (eventuele) +31 of 0031 door een 0.
En dan kijken of het met een 0 begint (voor NL dan) gevolgd door 9 cijfers waarbij het tweede cijfer 1-9 moet zijn.
Denk je internationele nummers te krijgen en het nummer begint met een +, vervang dan door 00.
Begint het met 00, niets doen.
Begint het met 0, maak er 0031 van.
Dus dat je altijd een nummer krijgt als 0031184633843 bijvoorbeeld: dat is +31 (0)184-633.843.
Ik doe het zelf zo (alleen voor NL-publiek):
Code (php)
1
2
3
2
3
<?php
$_POST[$veld] = str_replace(array("+31", "0031", "-", "."), array("0", "0", ""), $_POST[$veld]);
?>
$_POST[$veld] = str_replace(array("+31", "0031", "-", "."), array("0", "0", ""), $_POST[$veld]);
?>
Kris Peeters op 24/09/2013 16:33:08:
>> if(substr($phone,0,2)=='00' && substr($phone,2,2)=='31')
Enkel Nederlanders welkom?
Zet daar ten minste iets als
if(substr($phone,0,2)=='00' && (substr($phone,2,2)=='31' || substr($phone,2,2)=='32'))
Verder lijkt deze code me wel zinnig.
Enkel Nederlanders welkom?
Zet daar ten minste iets als
if(substr($phone,0,2)=='00' && (substr($phone,2,2)=='31' || substr($phone,2,2)=='32'))
Verder lijkt deze code me wel zinnig.
En ik gebruik ze dan nog voor Belgie en Italie :)