Veld mag alleen uit cijfers bestaan

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bernhard G

Bernhard G

07/11/2015 17:27:00
Quote Anchor link
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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 -
 
PHP hulp

PHP hulp

24/12/2024 03:14:20
 
- Ariën  -
Beheerder

- Ariën -

07/11/2015 17:43:54
Quote Anchor link
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.
Gewijzigd op 07/11/2015 17:54:22 door - Ariën -
 
Bernhard G

Bernhard G

07/11/2015 17:49:03
Quote Anchor link
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?
 
- Ariën  -
Beheerder

- Ariën -

07/11/2015 17:57:26
Quote Anchor link
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.
 
Pg Vincent

Pg Vincent

07/11/2015 18:33:09
Quote Anchor link
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!
 
Jan R

Jan R

08/11/2015 06:08:41
 
Pg Vincent

Pg Vincent

08/11/2015 11:16:30
Quote Anchor link
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.
 
Thomas van den Heuvel

Thomas van den Heuvel

08/11/2015 15:31:03
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?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.
 
Niels van der Schaaf

Niels van der Schaaf

13/11/2015 03:05:03
Quote Anchor link
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
Gewijzigd op 13/11/2015 03:05:30 door Niels van der Schaaf
 
Ivo P

Ivo P

13/11/2015 09:33:18
Quote Anchor link
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.
 
Eddy E

Eddy E

14/11/2015 08:35:41
Quote Anchor link
Laten we het dan vooral gemakkelijk maken:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<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.

Toevoeging op 14/11/2015 08:41:15:

Je kan eventueel een pattern aan koppelen.
Dus dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<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?
Gewijzigd op 14/11/2015 08:37:25 door Eddy E
 
Martin -

Martin -

14/11/2015 22:40:15
Quote Anchor link
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.

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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.