Beste,

Ik wil in dit stukje script dat je alleen cijfers mag invullen en anders de foutmelding telefoon krijgt.

Weet iemand wat ik moet invoeren? Alvast bedankt.

 

<div class="row">
							<div class="label"> Telefoonnummer </div>
							<div class="input">
								<input type="text" id="telefoon" class="detail" name="telefoon" value="<? echo !empty($_POST["telefoon"]) ? htmlspecialchars($_POST["telefoon"]) : ""; ?>" />
								<? if (!empty($errors["telefoon"])): ?><span class="error"><? echo $errors["telefoon"]; ?></span><? endif; ?>
							</div>
						</div>
En wat als iemand deze als internationaal formaat invult? Zoals +31 12 3456789?
En sommige mensen vullen weer streepjes in tussen het netnummer en het abonneenummer of weer spaties in het abonneenummer.

Ik zou liever voor een controle gaan of er andere tekens inzitten dan spaties, en de + en -. Of gewoon een controle of deze gewoon ingevuld is.

Verder hebben we code-tags op het forum voor scripts.
Ik heb nu dit: if ( empty($_POST["telefoon"]) ) {
$errors["telefoon"] = "Je hebt nog geen telefoonnummer ingevuld";
}

Het telefoonnummer is best cruciaal dus dit moet goed ingevuld worden. Als iemand nu 'test' intypt mag dat gewoon. Je zet me inderdaad wel aan het twijfelen. Iemand nog een mooie gedachten hierover?
Of wat dacht je van naambellen? 0800-123 PIZZA bijv.? ;-)

Anders moet je een bepaald formaat specificeren.

Verder heb ik code-tags toegevoegd aan je bericht. Zou je deze voortaan zelf willen toevoegen? Alvast bedankt.
Als je een formaat wilt afdwingen voor een telefoonnummerdan moet je er wel heel duidelijk bij zetten wat je verwacht. Een ding wat je niet moet vergeten is, net als bij email adressem; dat een correct formaat niet betekent dat het een geldig telefoonnummer is. +31(1)23-4567890 is een valide telefoonnummer maar de centrale snapt het niet.

Persoonlijk zou ik alleen een minimale lengte instellen; een telefoonnummer van zeven tekens is gegaranderd niet lang genoeg, in ieder geval niet om het te kunnen bellen vannuit een ander netnummer. Hoe lang het echte nummer wordt... tsja zoals Arien zegt; er zijn tig manieren om een telefooonnummer op te schrijven.

Als het echt zo belangrijk is dan is het wellicht handig om nog een keer een bevestiging te vragen, of in ieder geval dus uit te leggen hoe je het nummer wilt zien. De makkelijkste manier om een geldig nummet te krijgen is om de gebruiker zo ver te krijgen dat hij het goed invult!
Sla sowieso altijd de originele string óók op, want als je het nummer platslaat op basis van een setje regels dan is het praktisch een gegeven dat je een formaat gaat tegenkomen wat daar niet goed doorheen komt en dan moet je het als mens interpreteren.

Ik zou ook niet controleren op geldige netnummers want er komen regelmatig nieuwe netnummers bij (je sluit potentieel nieuwbouwwijken uit) en een paar jaar geleden heeft tante-KPN zelfs cijfers van het abonneenummer verhuist naar het netnummer (poef, al je validatie in één klap fout). Nee dat gebeurt niet vaak, net als veranderingen in de BTW en de munteenheid van een land. Jakkes wat heb ik een berg legacy code moeten aanpassen om overal de hardcoded munteenheid en btw flexibel te maken...

Tot slot: bedenk of het voor jouw toepassing wel mogelijk is om telefoonnummers te beperken tot bepaalde landen; ikkan vannuit Duitsland ook zaken doen namens een Nederlands bedrijf, maar toch gebeld willen worden in Duitland.
Je zou ook eens kunnen kijken wat anderen doen, zo zou je een dropdown voor een landencode kunnen maken, zodat je alleen het nationale/lokale nummer hoeft op te geven.

Alle regels, voorzieningen en voorzorgsmaatregelen ten spijt kan een nummer toch nog ten onrechte fout of goed worden gerekend. Je zou bij wijze van test het nummer kunnen bellen of SMS'en met een controlenummer wat je op moet geven ter bevestiging van het opgegeven telefoonnummer, dat lijkt mij nog altijd de beste test: een soort van bevestiging.

En om antwoord te geven op de vraag van de topicstarter, de volgende reguliere expressie keurt enkel invoer dat cijfers (0 t/m 9) bevat (of de lege string) goed:
<?php
function hasOnlyDigits($input) {
    return preg_match('#^[0-9]*$#', $input) === 1;
}
?>


NB: Als je wilt dat alleen niet-lege invoer wordt geaccepteerd, maak je van de * een +. Dit zorgt ervoor dat de invoer minimaal lengte 1 moet hebben.

NB: Wat veel mensen mogelijk niet weten is dat $ ook één regelovergang (\n) accepteert.
De string "01234\n" is dus ook geldig! Om deze reden doe je er verstandig aan de waarde alsnog te trimmen als blijkt dat deze "geldig" is bevonden.
als je een pattern='#^[0-9]*$#' (tenminste de juiste regex) op je input doet kan je met css een :invalid van de input stijlen! Zo houd je het juist client vriendelijk en kan de gebruiker het direct wijzigen en valideert php als laatst nog een keer om het te bevestigen
van de week werd in een form mijn nummer als 010-123456 nog afgekeurd, omdat die - erin staat.

Beetje klantvriendelijker zou het zijn om zelf te snappen dat die - opmaak is, en die er eventueel uit te strippen. Liefst alleen tbv de controle te strippen.

In de praktijk zal het vaak zo zijn dat het nummer door een persoon overgenomen wordt op een telefoon. Dan leest dat ook voor je medewerker gemakkelijker.

Zou het een automatisch proces zijn, dan is het ook daarin niet zo heel moeilijk om op dat moment de - weg te halen.

Als je maar constateert dat het nummer met wat goede wil lijkt op een telefoonnummer.
Laten we het dan vooral gemakkelijk maken:

<input type="tel" name="telefoonnummer">


Voordelen
- accepteert telefoonnummers
- wisselt op je telefoon/tablet direct naar nummers toe bij het invoeren
- je kan je contactenlijst erbij pakken (althans: op mijn Android-rom wel ;))

Nadelen
IE 6.0 weet niet wat het is en zal het als type="text" weergeven. En dat is prima.

[size=xsmall]Toevoeging op 14/11/2015 08:41:15:[/size]

Je kan eventueel een pattern aan koppelen.
Dus dit:

<input type="tel" name="telefoonnummer" pattern="[0-9]{6,}">

Dus alleen cijfers (geen streepjes etc) en minimaal 6 tekens.
Wat doe je dan als je telefoonnummer 114 (dierenambulance is)?
Juist... Dus gewoon 'orgineel' opslaan. Waarom zou je het wijzigen? Omdat je er anders niet mee kan rekenen? Wat ga je berekenen dan?

Reageren