【发布时间】:2014-07-03 04:44:38
【问题描述】:
我想通过一个模式来验证一个 python 对象。为此我找到了schema framework。
我想验证一个数字字符串:
a = {
'phone_number': '12233'
}
你知道如何通过正则表达式验证这个字符串吗?
此时,我只知道如何进行字符串验证:
Schema(str).validate('12')
【问题讨论】:
我想通过一个模式来验证一个 python 对象。为此我找到了schema framework。
我想验证一个数字字符串:
a = {
'phone_number': '12233'
}
你知道如何通过正则表达式验证这个字符串吗?
此时,我只知道如何进行字符串验证:
Schema(str).validate('12')
【问题讨论】:
Schema 将调用任何可调用对象;只需提供一个使用正则表达式的函数:
import re
pattern = re.compile('^12\d+$')
Schema(And(str, lambda x: pattern.match(x) is not None))
演示:
>>> import re
>>> from schema import Schema, And
>>> pattern = re.compile('^12\d+$')
>>> s = Schema(And(str, lambda x: pattern.match(x) is not None))
>>> s.validate('123234')
'123234'
>>> s.validate('42')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/mj/Development/venvs/stackoverflow-2.7/lib/python2.7/site-packages/schema.py", line 153, in validate
raise SchemaError([None] + x.autos, [e] + x.errors)
schema.SchemaError: <lambda>('42') should evaluate to True
【讨论】: