Veld mag alleen uit cijfers bestaan
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.
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<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>
Gewijzigd op 07/11/2015 17:58:05 door - Ariën -
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.
Gewijzigd op 07/11/2015 17:54:22 door - Ariën -
$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?
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.
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!
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.
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:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
function hasOnlyDigits($input) {
return preg_match('#^[0-9]*$#', $input) === 1;
}
?>
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.
Gewijzigd op 13/11/2015 03:05:30 door Niels van der Schaaf
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.
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.
Toevoeging op 14/11/2015 08:41:15:
Je kan eventueel een pattern aan koppelen.
Dus dit:
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?
Gewijzigd op 14/11/2015 08:37:25 door Eddy E
Thomas van den Heuvel op 08/11/2015 15:31:03:
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.
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.
Je kunt hier de "D"-modifier voor gebruiken.
Zie: http://php.net/manual/en/reference.pcre.pattern.modifiers.php
Quote:
D (PCRE_DOLLAR_ENDONLY)
If this modifier is set, a dollar metacharacter in the pattern matches only at the end of the subject string. Without this modifier, a dollar also matches immediately before the final character if it is a newline (but not before any other newlines). This modifier is ignored if m modifier is set. There is no equivalent to this modifier in Perl.
If this modifier is set, a dollar metacharacter in the pattern matches only at the end of the subject string. Without this modifier, a dollar also matches immediately before the final character if it is a newline (but not before any other newlines). This modifier is ignored if m modifier is set. There is no equivalent to this modifier in Perl.