HTML5とパターン属性を使用してすべてのフォームを検証しようとしていますが、いつものように、インターネット上で完璧なものはなく、HTML5対応のブラウザーを使用していないユーザーを捕らえるためのバックアップが必要です。
ハンドブックで正規表現の正確な表現を見つけるのに苦労しているので、ご存知の場合は、助けていただければ幸いです。私は2つの方法でコードを記述しました。HTMLの方法とHTMLヘルパーの方法(以下を参照)です。HTML5は、IEを除く最新のブラウザーで期待どおりに機能し、検証されますが、Pythonに変換できません。
以下に示す例は、次の式です。pattern="[A-F0-9]{11}|[A-F0-9]{14}"
これにより、入力にAFの大文字と0〜9の数字のみが効果的に含まれるようになります。また、長さが正確に11文字または14文字であることを保証します。では、これをweb2pyでどのように使用しますか?IS_LENGTHは私のテストからの範囲のみを受け入れるようであり、これまでのところ、IS_ALPHANUMERIC
受け入れられる文字を制御することしかできませんでした。
以下のフォームをご覧ください。
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ヘルパー:
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)