HTML5 patterns bij input

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Eddy E

Eddy E

07/08/2013 16:48:35
Quote Anchor link
Hey mensen.
Bij HTML5 heb je patterns bij input.
Zie: http://html5pattern.com/Names

Nu staan daar een aantal leuke dingen, maar ik wil er een paar bij hebben.

Naam: A tot Z, spatie, A tot Z, minimaal 5 letters. Inclusief ç en ë etc
Straat: A tot Z of 1 tm 10, spatie, nummer (eventueel met achtervoegsel)
Postcode heb ik al: [1-9][0-9]{3}\s?[a-zA-Z]{2}
Telefoonnummer: 10 cijfers, spaties mogen ook, streepjes en punten ook. +31 of 0031 mag ook. 06 ook. Ik heb al: [0-9.\-\s]{10,15}
emailadres: men zegt type="email", maar dan valideert iets@iets ook (zonder .nl bijvoorbeeld)
rekeningnummer: iets met nummers???

Kan iemand mij hier mee helpen?
Ik zal ze dan ook aan html5pattern.com toevoegen ;)
 
PHP hulp

PHP hulp

14/11/2024 04:34:41
 
Bart V B

Bart V B

07/08/2013 17:00:28
Quote Anchor link
Het is heel leuk bedacht dat html5pattern, maar eh..
Is dat wel veilig vraag ik me af.
Een formulier is immers zo verbouwd dat dit niet meer werkt. :)

Anders gezegd: Is het geen beter plan om dit soort controles serverside te doen?
Gewijzigd op 07/08/2013 17:00:44 door Bart V B
 
Lendl Verschoor

Lendl Verschoor

07/08/2013 17:05:25
Quote Anchor link
Bedankt voor de link!

@Bart, je moet altijd alles server side controleren wat vanaf de gebruiker komt.
 
Wouter J

Wouter J

07/08/2013 17:31:16
Quote Anchor link
Bart, gebruikers zullen het altijd fijn vinden dit soort informatie realtime te krijgen, zodat ze hun velden direct kunnen aanpassen. Hierna altijd serverside checken.

Eddy (dacht ik), het komt er op neer dat je een JS engine compatible pattern moet maken. Ik zal dat vanavond doen (als niemand me voor is)
 
Eddy E

Eddy E

07/08/2013 19:15:53
Quote Anchor link
Nou, graag Wouter.
Op Chrome en Opera werkt in in elk geval goed. Geeft nette (browser) meldingen dat het verplicht is (required) en zo. Zonder extra opmaak/html/css van mijn kant.

En uiteraard wordt dit serverside ALSNOG gecontroleerd.

Toevoeging op 08/08/2013 11:04:32:

Niemand was je voor Wouter!
 
Eddy E

Eddy E

14/08/2013 23:06:00
Quote Anchor link
Wouter, zou jij (of iemand anders?) hier nog naar willen kijken?

't Is een super-functie, maar ik ben er echt slecht is.
De standaard 'email'-type is nog niet goed genoeg, dus dat moet ook via een pattern.
 
Ward van der Put
Moderator

Ward van der Put

15/08/2013 09:26:07
Quote Anchor link
Net zoals je a-z gebruikt voor de kleine letters a tot en met z, kun je bijvoorbeeld à-ö gebruiken voor de kleine accentletters à, á, â, enzovoort tot en met ô, õ, en ö. Inclusief de escape \s voor spaties krijg je dan zoiets:

pattern="^[a-zA-Zà-ö\s]{5,}$"

Je moet even met een Unicode-tabel uitvogelen welke karakterbereiken (bijvoorbeeld voor Slavische namen) en speciale tekens (zoals streepjes en apostrofs) je wilt toestaan.
 
Eddy E

Eddy E

15/08/2013 12:13:49
Quote Anchor link
Dat is nu redelijk gelukt.
Alleen een IBAN-nummer controleren is nog lastig.
Ik heb op jsFiddle het een en ander gezet: http://jsfiddle.net/V8Wp9/

Die IBAN-check werkt, maar dan mag je geen spaties toevoegen.
En dat wil ik wel (optioneel).

Dus NL45RABO03934655 is geldig.
maar NL45 RABO 03934655 moet dat ook zijn (en dat is het nu niet).
Iemand een idee?
 
Ward van der Put
Moderator

Ward van der Put

15/08/2013 12:26:32
Quote Anchor link
ING gebruikt nog meer spaties en eindigt met een groep van twee cijfers:

NL95 INGB 0001 2345 67

Volgens de volgende reguliere expressies kun je nog grotere verschillen tussen landen verwachten, maar daarmee kom je wel ongeveer in de buurt van het patroon dat je zoekt:

http://serprest.pt/jquery/ht5ifv/extensions/tools/IBAN/
 
Eddy E

Eddy E

15/08/2013 12:33:51
Quote Anchor link
Daar heb ik bovenstaande regex ook vandaan, maar die pakt dus geen spaties...

Die genereert deze Javascript:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function isValidIBAN($v){ //This function check if the checksum if correct
            $v = $v.replace(/^(.{4})(.*)$/,"$2$1"); //Move the first 4 chars from left to the right
            $v = $v.replace(/[A-Z]/g,function($e){return $e.charCodeAt(0) - 'A'.charCodeAt(0) + 10}); //Convert A-Z to 10-25
            var $sum = 0;
            var $ei = 1; //First exponent
            for(var $i = $v.length - 1; $i >= 0; $i--){
                $sum += $ei * parseInt($v.charAt($i),10); //multiply the digit by it's exponent
                $ei = ($ei * 10) % 97; //compute next base 10 exponent  in modulus 97
            };
            return $sum % 97 == 1;
        }
        var $patterns:{ //Map automatic generated by IBAN-Patterns Online Tool
                IBAN: function($v){
                    $v = $v.replace(/[-. ]/g,'');
                    return /^BE\d{14}$|^NL\d{2}[A-Z]{4}\d{10}$/.test($v) && isValidIBAN($v);        
                },
        };


Dus moet ik toch gewoon als HTML5-pattern dit hebben?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
^BE\d{14}$|^NL\d{2}[A-Z]{4}\d{10}$
?
Gewijzigd op 15/08/2013 12:36:09 door Eddy E
 
Ward van der Put
Moderator

Ward van der Put

15/08/2013 12:48:50
Quote Anchor link
Heb je het al geprobeerd met "Allow Spaces" ingeschakeld?
 
Eddy E

Eddy E

29/08/2013 15:05:42
Quote Anchor link
Ik heb nu weer wat gedaan:

Voornaam Achternaam: [A-Za-zÁ-Öá-ö]{1,}\s[A-Za-zÁ-Öá-ö]{1,}
Adres: [A-Za-zÁ-Öá-ö\D]{1,}\s\d{1,}
Woonplaats: .{3,}
Postcode: [1-9][0-9]{3}\s?[a-zA-Z]{2}
Telefoonnummer: 0[\d\s-]{10,13}
Emailadres: [\w\+\-\._]+@[\w\-\._]+\.\w{2,}
IBAN: ^(?=[0-9A-Z]{18}$)NL\d{2}[A-Z]{4,5}\d{10}$

Voor een datum gebruik je type="date".
Je zou zeggen dat type="email" beter is voor een emailadres. Maar de browser keurt iets@iets ook goed als emailadres, en dat is het natuurlijk niet.

Reacties, vragen en of opmerkingen?

Toevoeging op 29/08/2013 15:07:46:

Online gegooid: http://jsfiddle.net/FPxbn/
Gewijzigd op 29/08/2013 16:13:56 door Eddy E
 
Ward van der Put
Moderator

Ward van der Put

29/08/2013 16:10:11
Quote Anchor link
Eddy E op 29/08/2013 15:05:42:
Je zou zeggen dat type="email" beter is voor een emailadres. Maar de browser keurt iets@iets ook goed als emailadres, en dat is het natuurlijk niet.

In een netwerk is declaratie@salarisadministratie wel een geldig e-mailadres. En als je een declaratie wilt mailen naar de salarisadministratie, hoeft dat niet per se via internet. Beter van niet zelfs.

Ik zou wél type="email" gebruiken, om te voorkomen dat je geldige e-mailadressen uitsluit. In steeds meer TLD's, bijvoorbeeld onlangs nog .be, worden speciale karakters met accenten toegestaan: als je het patroon te streng formuleert, keur je geldige e-mailadressen af.
 
Eddy E

Eddy E

29/08/2013 16:12:54
Quote Anchor link
is iets@iets echt te 'versturen'? Intern wellicht, maar ik ga mijzelf niet intern op mijn eigen website (http!) inschrijven... Toch?

De Á-Öá-ö staat er bij ;)
 
Ward van der Put
Moderator

Ward van der Put

29/08/2013 16:31:39
Quote Anchor link
Eddy E op 29/08/2013 16:12:54:
Is iets@iets echt te 'versturen'? Intern wellicht, maar ik ga mijzelf niet intern op mijn eigen website (http!) inschrijven... Toch?

Hahaha, nee niet op een website. Maar je wilt niet weten hoeveel bedrijven met een duur LAN de hele dag intern via internet zitten te mailen.

Goed dat je hier de uitkomst deelt! Daar kunnen we wat mee.
 



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.