Archief - Regex voor gsm- en telefoonnummers

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Timmos

Legacy Member
Hallo,

Ik zit vast met een regex voor grep die zowel telefoon- als GSM-nummers moet doorlaten. Deze formaten zijn toegestaan:

09/xxx.xx.xx en 04xx/xx.xx.xx

Het deel achter de slash is poepsimpel, maar het gaat om het deel voor de slash. Ik heb al zitten zoeken voor de of-operator te gebruiken maar die wil precies niet werken op grep.

Het is voor iemand anders die niet in Unix werkt, dus egrep-only zaken kan hij wellicht ook niet gebruiken.

Timmos

Legacy Member
Wat ik nu heb is de regex die je kan zien in het commando van grep (als parameter):
Code:
-bash-3.00$ cat hallo.txt
0494/12.35.15
09/226.39.15
09/229.21.79
0484/65.16.12
0475/42.18.99
09/123.54.99
0(494)/12.65.42
0499 12 13 14
0412/52.53.12
00654213
0499.54.65.12
0499/54/65/12
09.213.56.12
092134532
0499541234
049954123
(0494)612452
(09)2135462
(0494) 32.12.21
(09) 213.21.54
-bash-3.00$ grep "^0[49][789]\{0,1\}[0-9]\{0,1\}/[0-9]\{2,3\}\.[0-9]\{2\}\.[0-9]\{2\}$" hallo.txt
0494/12.35.15
09/221.79.22
09/229.21.79
0484/69.18.58
0475/42.18.99
09/123.54.99
-bash-3.00$

Maar dit laat dus ook bvb 0912/63.23.13 als gsm nummer toe, of 043/12.12.32.

Enfin ja :p De meest voorkomende "fouten" filtert hij er dus wel degelijk uit zoals je kan zien. De 6 juiste nummers blijven over.

Het kan/mag niet in 2 verschillende regexen dus ik moet ergens wel kunnen OR-en

bugoff

Legacy Member
Hmm,

waarom haal je trouwens niet eerst alle rare tekens eruit?

Iets als: cat nummers.txt | sed 's/[/.\ \()]//g' | grep "^04[7-9][0-9]"

Timmos

Legacy Member
Zoals ik al zei is het niet voor mezelf. Daarom moet gewoon gecontroleerd worden of het een goed nummer is: met een simpele controle of het allemaal cijfers zijn als ik de rare tekens weglaat zou het nogal "vuil werk" zijn, want dan kan ik met jouw regex bvb nummers zoals 0400123123 maken, wat geen GSM nummer is.

Het moet ofwel 04[789][0-9] zijn, ofwel 09. Andere nummers mogen niet voorkomen als invoer.

En de regex moet beide soorten aankunnen, dus de mogelijkheid om 2 aparte regexen te controleren mag niet :/

dJeez

Legacy Member
Timmos zei:
En de regex moet beide soorten aankunnen, dus de mogelijkheid om 2 aparte regexen te controleren mag niet :/
Je kan de 2 regexen wel aan elkaar plakken hé, als volgt (kleurtje louter ter illustratie):
(09\/[0-9]{3}\.[0-9]{2}\.[0-9]{2}|04[789][0-9]\/[0-9]{2}\.[0-9]{2}\.[0-9]{2})

Die zou moeten werken (die leek het toch te doen in regex coach). Eerste deel probeert 09/xxx.xx.xx te matchen, tweede deel 04xx/xx.xx.xx.

Wat meer info over alternation : http://www.regular-expressions.info/alternation.html
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan