replace telefoonnummer

Status
Niet open voor verdere reacties.

Frenske123

Terugkerende gebruiker
Lid geworden
2 jul 2007
Berichten
1.267
Hoi,

In een wil als iemand in een formulier/textarea een telefoonnummer (tussen de tekst) invult dat dit vervangen wordt door b.v xxxxxxx of een popup krijgt dat dit verboden is en dus niet verder kan

iemand een idee hoe dit te maken?
 
Bedankt

Maar zal moeten kijken of het een telefoonnummer is 012-1234567
zoek een wat completer voorbeeld
 
Dat zijn ook zaken waar je een expressie voor moet gebruiken ;)

Je zult een patroon vast moeten stellen en door middel van .test() controleer je of het patroon voorkomt.
[js]
var string1 = 'Hier zit een telefoonnummer in 912-1823956',
string2 = 'Hier zit 912 geen telefoonnummer in';

var pattern = new RegExp("\d{3}-\d{7}"); // Patroon: 3x een getal, gevolgt door een streepje en dan 7 getallen
if(pattern.test(string1))
{
alert('Er zit een nummer in de string:'+ string1);
}
else
{
alert('Er zit geen nummer in de string:'+ string1);
}
if(pattern.test(string2))
{
alert('Er zit een nummer in de string:'+ string2);
}
else
{
alert('Er zit geen nummer in de string:'+ string2);
}
[/js]
Iets in die richting :)
Niet getest en getypt op een iPad, kortom het is niet gezegd dat het werkt :D
 
Bedankt !

Ik vraag me alleen af hoe dit in te vullen bij het form (blond)
 
Ik vond nog een goed validatie script

moet deze nog geschikter maken voor telefoonnummer
"regexp=“regexp=^[a-zA-Z0-9-().\s]{10,15}$” "

edit dit controleert de ingave, zal dus een vervaniging moeten zijn

dus wordt ingevuld in een form

hallo,

bla bla bla 0123456789 bla bla

moet worden
hallo,

bla bla bla xxxxxxxxxxx bla bla
 
Laatst bewerkt:
Ik denk niet dat je begrijpt hoe reguliere expressies werken.

Het patroon waar je mee komt mag namelijk alle tekens bevatten, zolang de reeks minimaal 10 en maximaal 15 tekens bevat.

Als je het wilt vervangen zul je .replace() moeten gebruiken.
[js]
var input = 'Hier is mijn telefoonnummer: 0123-456789, hopelijk heb je er wat aan. Mocht die niet werken kun je 0123456789 proberen. Veel plezier 9 september.',
pattern = /(\d{4}-\d{6}|\d{10})/g;
alert(input.replace(pattern, 'xxxxxxxxxx'));
// Output: Hier is mijn telefoonnummer: xxxxxxxxxx, hopelijk heb je er wat aan. Mocht die niet werken kun je xxxxxxxxxx proberen. Veel plezier 9 september.
[/js]
Zoals je ziet zul je meerdere patronen moeten opstellen, aangezien je op meerdere manier een telefoonnummer kunt noteren. (en dan nog is het mogelijk om de controle voor de gek te houden). Dit kun je doen door een groep te maken met haken "()" en tussen de opties een "|" te plaatsen.

Bovenstaand voorbeeld controleert dus of er in de gegeven string iets in het volgende patroon zit: "4x een getal, gevolgt door een streepje en dan 6 getallen of een reeks van 10 getallen achter elkaar".

Ik vermoed echter dat je de input ergens wilt opslaan, in een database bijvoorbeeld.
Dan heb je weinig aan javascript, dan zul je via PHP o.i.d. moeten gaan werken.

Gelukkig werken reguliere expressies daar hetzelfde alleen zul je een andere functie moeten gebruiken.
De PHP functie is preg_replace()
 
Code:
Hoi Tha Devil

Bedankt voor uitvoerige reactie:thumb:

Moet dit toepassen op volgende

Code:
<textarea id="gb_comment" name="gb_comment" cols="41" rows="11" onselect="storeCaret(this);" onclick="storeCaret(this);" onkeyup="storeCaret(this);" onchange="storeCaret(this);">$this->comment</textarea>
 
Wanneer je het via PHP op wilt lossen zul je het op de verwerk-pagina moeten plaatsen. (Wat in de <form action=""> staat waar de textarea zich in bevindt)

Een andere optie is het kijken wat de javascript-functie storeCaret() doet.
In principe zou je daarmee on-the-fly de nummers kunnen controleren en aanpassen.
Het risico dat je daarmee loopt is dat men net zolang een nummer op een andere manier typt totdat ie niet meer aangepast wordt.
 
Ik zal het eens bekijken , maar waarschijnlijk niet ervaren genoeg
 
Hoi Frenske123,

Ik heb eens gepeinsd. ;)
Dit lijkt me een ontzettend lastig probleem, maar ik kan me wel voorstellen dat soms een automaatje handig kan zijn om telefoonnummers uit een bericht weg te filteren.
Bijvoorbeeld bij een dating-site:
  • om te verhinderen dat mensen onnadenkend hun privacy te grabbel gooien;
  • of om te verhinderen dat beroeps-vrijers/sters reclame gaan maken;
  • of om andere ongein te verhinderen (bv. wraakberichten als: "Beste mensen, ik had een afspraak met Bartje27, maar dat is een ontzettende prolurk want .... - Nare ervaring. Bel 'm plat! Doe het zonder nummerherkenning, en bij voorkeur midden in de nacht! Zijn nummer is .......").

Ik denk dat javascript hier sowieso te onbetrouwbaar voor is. De controle zal met php (serverside) moeten gebeuren, wat door de bezoeker niet te beïnvloeden is.

Probleem 1: de notatie
Behalve de 06-nummers en de kengetallen met 3 cijfers zijn er ook kengetallen met 4 cijfers. Dat levert in de "gewone notatie" al 3 patronen die afgevangen moeten worden:
06-12345678
020-3456789
0123-456789

Maar iemand kan ook een internationale reeks geven, met landnummer en daar geldende (aantallen) getallen (!):
0031-612345678 (naar NL 06 nummer)
0031-203456789 (naar NL vast nummer)
0049-1234.... (naar Duitsland)

Dat kan ook geschreven worden als:
0031(6)12345678
0031(20)3456789
0031(123)456789
enz.

Daarmee kom je op de haakjes-notatie, die ook zonder landnummer wel gebruikelijk is:
(06) 12345678
(020) 3456789
(0123) 456789
Complicatie: hierboven zitten er ook spaties in!

Zelf maak ik graag gebruik van spaties om telefoonnummers makkelijker leesbaar/onthoudbaar te maken (hangt van de getallen af waar ik de spaties zet!), bv.:
06-123 00 456
020-34 999 56
020-345 66 88
0123-132 231
0123-12 14 16

Sommigen gebruiken puntjes waar ik spaties zet:
06-123.00.456
020-34.999.56
020-345.66.88
0123-132.231
0123-12.14.16

Of misschien wel midden-puntjes:
06-123·00·456
020-34·999·56
020-345·66·88
0123-132·231
0123-12·14·16

Terwijl anderen geen tussenstreepjes gebruiken, maar een slash:
06 / 123 00 456
020 / 34 999 56
020 / 345 66 88
0123 / 132 231
0123 / 12 14 16
Ook hier weer alle mogelijke varianten met spaties, puntjes en internationaal mogelijk!

Dan heb je ook kans op mensen die de 06 of het kengetal niet rechtstreeks bij het nummer zetten,
bv:
"Bel me in Amsterdam (020), nummer: 1234567."
Dan zouden ook alle 8-, 7- en 6-cijferige getallen verhinderd moeten worden.

Dit is wat me zo te binnen schiet.
O, nog een: een ZWSP-teken (ZeroWidthSPace, zie bv. hier) zou het filter ook om de tuin kunnen leiden. Ook dat moet gedetecteerd worden.


  • Alles is voor het menselijk oog makkelijk te herkennen als telefoonnummer.
Maar voor automatische patroon-herkenning met reguliere expressies ("wat regulier?" :P) ligt dat anders.
Al die haakjes, spaties, slashes en punten kunnen in principe wel gestript worden, maar maken het wel puur ingewikkeld!
Ik kan me vergissen, maar ik denk dat het een bijzonder veeltakkig beslisboompje zou moeten worden.

Probleem 2: de moedwilligheid
Wie moedwillig een telefoonnummer wil droppen, zal waarschijnlijk niet weten dat er een filter op zit dat de meeste gebruikelijke notaties onderschept. Die zal dus beginnen met een nummer in een "normale" notatie.
Ook iemand die onnadenkend een telefoonnummer in z'n bericht zet, zal geen moeite doen het nummer te verduisteren.
Dan kan je het volgende laten gebeuren (na de klik op de "verzend-knop" van het formulier):


  1. De php op de server signaleert het gebruik van een telefoonnummer, en zendt het formulier terug met gewist nummer, voorzien van een boodschap voor de invuller.
  2. De php op de server noteert tegelijkertijd de datum/tijd, de gebruikersnaam, het ingegeven telefoonnummer en het ip-adres van de inzender, en stopt dat in een kastje "telefoonpogingen" van de database.
  3. De php stuurt tegelijkertijd een email aan de moderator met dezelfde gegevens: "Telefoonpoging van gebruiker x".

De boodschap kan dan iets in deze geest zijn:

tel-nr-3.png

Er is geen andere keus dan op OK klikken, anders kom je niet bij het formulier terug. ;)

De onnadenkenden zullen denken "Oeps, dat was niet de bedoeling", en het verder uit hun hoofd laten.
De boosdoeners zullen wellicht een andere notatie proberen.
Als die er ook uitgefilterd kan worden, krijgen ze een Laatste Waarschuwing (en de moderator weer een email-melding):

tel-nr-4.png

Eventueel kan ook in de Voorwaarden een boete-clausule staan: "Gebruiker gaat ermee akkoord dat hij/zij een onmiddellijk en onherroepelijk opeisbare boete verschuldigd is van (laten we zeggen) € 500,- indien een telefoonnummer in een bericht wordt geplaatst; onverlet de andere in deze Voorwaarden omschreven consequenties." - En dat dan mooi juridisch onderbouwd.

Wordt een derde poging onderschept (eventueel 1 week of 3 maanden later; zit in de database!), dan kan automatisch het account geblokkeerd worden, enz.

Wordt wel de eerste poging gesignaleerd, maar verder niets (als de boosdoener zo slim is iets anders te verzinnen), dan is in elk geval de moderator op scherp gezet. Die kan bv. een binnenkomend bericht na de eerste poging in de wacht zetten tot nadat hij/zij gekeken heeft of er niets illegaals gebeurt en toestemming voor plaatsing heeft gegeven.

Blijft over: de eerste poging wordt niet gesignaleerd, maar lukt wel. Dat is de volgende categorie.

Probleem 3: de notoire bedriegers
Die kunnen heel andere wegen bewandelen, waartegen geen kruid gewassen is.

Bijvoorbeeld:
"Bel me maar vrijblijvend! Tel: nulzes 123viervijf678."

of:
"Ik ben te bereiken op nummer O6-23Ol8497."
De nullen zijn hier hoofdletters o, de 1 van 18 is een kleine letter L. De weergave hangt van het lettertype af, maar de lezer zal gauw begrijpen wat de bedoeling is!

tel-nr-1.png

of:
Het telefoonnummer vrolijk verpakken in een image, als ook afbeeldingen bij de berichten kunnen worden meegezonden. Daar kan geen reg_ex tegenop!

of desnoods:
"Contact via mijn avatar! ;)"
tel-nr-2.png

enzovoorts!

=======

Mijn conclusie:
Je kan van alles en nog wat proberen automatisch te regelen, maar zoals Tha Devil al zei: waterdicht kan het nooit zijn.
Er zal toch een moderator van vlees en bloed aan te pas moeten komen.


  • Verder zou trouwens dezelfde privacy-gevoeligheid kunnen spelen bij het opgeven van een gewoon adres *) of een email-adres in een textvak-bericht (of een echte naam, of een persoonlijk of commercieel webadres). Daar zijn helemaal lastig automaat-maatregelen tegen te treffen...

Succes!
Met vriendelijke groet,
CSShunter
___________
*) Aan de hand van een lijst met alle NL plaatsnamen zou je alle plaatsnamen automatisch kunnen laten blokkeren. Maar dan komt er bv. ook geen bericht meer door als "Gisteren mooie duinwandeling in Castricum gemaakt. Moet je ook eens doen!".
 
Klopt, hoewel alle verschillende notaties nog niet het grootste probleem zijn.
Dat zou je af kunnen vangen door alle tekens (spaties, haakjes, puntjes, streepjes) uit de gehele string te halen en dan te controleren of er een reeks van x cijfers achter elkaar voorkomt.

Maar inderdaad, het grootste probleem zit hem in de alternatieven :)

Het is hier op Helpmij hetzelfde, er is een scheldwoordenfilter maar ook zoiets werkt maar beperkt en dat is best lüllig ;)
 
Hoi CSS Hunter

bedankt voor de volledige uitleg ! waterdicht zal het niet echt worden...........

Ik zal het een dezer dagen nog eens op mijn gemak bekijken ,,ook de bijdrage van Thadevil
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan