我希望使用 HTML5 和模式属性验证我的所有表单,但与往常一样,互联网上没有什么是完美的,我仍然需要备份来捕捉那些不使用 HTML5 友好浏览器的用户。
我很难在手册中找到正则表达式的确切表示,所以如果你知道,我会很感激一些帮助。我以两种方式编写了代码,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)