If you want to stick with client side validation, you might also consider a Javascript polyfill library like Webshims Lib ( http://afarkas.github.com/webshim/demos/), which lets you use HTML5 features in older browsers. Also note that although client-side validation improves the user experience, it does not protect against malicious attacks, so you may still want some server-side validation in addition.
Anthony On Wednesday, April 11, 2012 4:21:35 PM UTC-4, RKS wrote: > > I'm looking to validate all of my forms with HTML5 and the pattern > attribute, but as always, nothing is perfect on the internet and I still > need a backup to catch those users who do not use HTML5 friendly browsers. > > I'm having trouble finding exact representations of the regular > expressions in the handbook so if you know, I'd appreciate some help. I > have written the code in two ways, the HTML way and the HTML helper way > (see below) and the HTML5 works and validates in modern browsers except IE > as expected but I can't translate them to python. > > An example, you will see below, is the expression > pattern="[A-F0-9]{11}|[A-F0-9]{14}" > This effectively forces an input to only contain uppercase letters of A-F > and numbers 0-9. It also ensures the length is exactly 11 characters or 14. > So how would I use this in web2py? IS_LENGTH seems to accept only a range > from my tests and so far I've only found IS_ALPHANUMERIC to control what > characters are accepted. > > Please seem the form below: > > HTML: > > <form id="activate_form" method="post" action=""> > <label for="meid">MSIE/ESN <sup>*</sup></label> > <input name="meid" pattern="[A-Fa-f0-9]{11}|[A-Fa-f0-9]{14}" > placeholder="MEID/ESN" required /> > <br /> > <label for="zip">Zip Code <sup>*</sup></label> > <input type="number" name="zip" pattern="{5}" placeholder="Zip > Code" required /> > <br /> > <br /> > <br /><br /> > <input type="button" name="cancel" value="Cancel" > onClick="history.go(-1);return true;" /> > <input type="submit" name="submit" value="Activate" /> > <p class="small"><sup>*</sup> denotes a required field. > </form> > > > > HTML Helpers: > > form=FORM(LABEL('MEID/ESN > ',(SPAN('*'))),INPUT(_name='meid',_pattern="[A-F0-9]{11}|[A-F0-9]{14}",_placeholder='MEID/ESN',_required='required',_title="The > > MEID/ESN number only contains 11 or 13 characters, the letters A-F, and the > numbers 0-9.",requires=[IS_LENGTH(11|14),IS_NOT_EMPTY()], > _onblur="this.checkValidity();"),BR(),LABEL('ZIP CODE > ',(SPAN('*'))),INPUT(_name='zip',_type='number',_pattern="[0-9]{5}",_placeholder='Zip > > Code',_required='required',_title="We only required the five character zip > code.",requires=IS_NOT_EMPTY()),BR(),BR(),BR(),BR(),INPUT(_type='button',_name='cancel',_value='Cancel',_onclick="history.go(-1);return > > true;"),INPUT(_type='submit',_name='submit',_value='Activate'),_method='post',_id='activate_form') > if form.accepts(request,session): > response.flash = 'Form accepted' > # redirect(URL('next')) > elif form.errors: > response.flash = 'Form has errors' > return dict(form=form) > > > > Thanks. >