Ploneformgen и регулярное выражение

Я хотел бы использовать регулярное выражение в форме, созданной с помощью ploneformgen 1.7. Я использую plone 4.1. В пользовательской проверке текстового поля.

Как использовать регулярное выражение?

Я пробовал следующее:

python: import re; test(value==re.search(r'[123]'), False, 'Needs to be number 1 or 2 or 3')

но это дает мне ошибку и, следовательно, не может проверить. Я хочу, чтобы значение было 1, 2 или 3. Я могу использовать выражение как

python: test(value=='1' or value=='2' or value=='3', False, 'Needs to be number 1 or 2 or 3')

НО я хотел бы использовать регулярные выражения. Пожалуйста, направляйте.


person user956424    schedule 05.02.2013    source источник
comment
Я не слишком много знаю о Plone, но кажется, что вы сравниваете MatchObject со строкой. Возможно, вам нужно получить доступ к .group(0), чтобы получить совпадающую строку?   -  person Oscar Mederos    schedule 05.02.2013
comment
@OscarMederos: это ограниченные выражения Python, и вы все равно не можете импортировать re ..   -  person Martijn Pieters    schedule 05.02.2013


Ответы (3)


Набор пакетов и типов, которые вы можете использовать в сетевых сценариях, выражениях TALES "python:", переопределениях PFG и адаптерах сценариев PFG, ограничен тем, что доступен в Restricted Python. Ограниченный Python намеренно очень консервативен в том, какие модули и типы он делает доступными.

Вы можете расширить список явными объявлениями «разрешить», сделанными в пакете Python, включенном в ваш список яиц. Образец такого пакета доступен в коллективе github и включает в себя несколько модулей и типов, которые я нашел особенно полезным в PloneFormGen, в том числе re.

Вы по-прежнему не сможете «импортировать re» в выражение TALES, но сможете использовать re в скрипте TTW, который можно использовать в качестве валидатора PFG.

person SteveM    schedule 05.02.2013

Согласно http://docs.zope.org/zope2/zope2book/ScriptingZope.html, вы не можете использовать регулярные выражения в TALES, так как они запрещены Restricted Python.

person Jon Stahl    schedule 05.02.2013

На самом деле вам нужно 2 параметра для метода поиска.

Вы должны использовать этот путь: import re; test(re.search(r'[123]', value), False, 'Needs to be number 1 or 2 or 3')

person rbernabe    schedule 05.02.2013
comment
Я проверяю это так: >>>import re >>>value = '3' >>>bool(re.search(r'[123]', value)) >>>True вы должны попробовать использовать логическую функцию - person rbernabe; 05.02.2013
comment
@rberbabe это возвращаемое только логическое значение. В любом случае спасибо за ваши усилия - person user956424; 05.02.2013
comment
@rbernabe: это ограниченная среда выражений Python, а не полный Python. - person Martijn Pieters; 05.02.2013