Orbeon Forms - 验证正则表达式前瞻
Orbeon Forms - validation regex lookahead
我想在文本字段上使用正则表达式验证公式。这是纯正则表达式:
^(?!(?:\D*\d){7})\d+(\.\d{1,2})?$
当我在正则表达式在线工具(例如:https://regex101.com/)中测试这个表达式时,一切正常。
但是当我尝试像这样在 Orbeon 中使用它作为验证器时:
matches(string(.), '^(?!(?:\D*\d){7})\d+(\.\d{1,2})?$') or xxf:is-blank(string(.))
我收到错误 'Incorrect XPath expression'。
当我从正则表达式先行部分中删除后,我就可以使用它了。
matches(string(.), '^\d+(\.\d{1,2})?$') or xxf:is-blank(string(.))
Orbeon Forms 是否支持正则表达式先行?
正则表达式前瞻:
https://www.regular-expressions.info/lookaround.html
重写表达式而不向前看。它匹配不超过 6 位的字符串。
使用
^(\d{1,4}(\.\d{1,2})?|\d{5}(\.\d)?|\d{6})$
解释
NODE EXPLANATION
--------------------------------------------------------------------------------
^ the beginning of the string
--------------------------------------------------------------------------------
( group and capture to :
--------------------------------------------------------------------------------
\d{1,4} digits (0-9) (between 1 and 4 times
(matching the most amount possible))
--------------------------------------------------------------------------------
( group and capture to (optional
(matching the most amount possible)):
--------------------------------------------------------------------------------
\. '.'
--------------------------------------------------------------------------------
\d{1,2} digits (0-9) (between 1 and 2 times
(matching the most amount possible))
--------------------------------------------------------------------------------
)? end of (NOTE: because you are using a
quantifier on this capture, only the
LAST repetition of the captured pattern
will be stored in )
--------------------------------------------------------------------------------
| OR
--------------------------------------------------------------------------------
\d{5} digits (0-9) (5 times)
--------------------------------------------------------------------------------
( group and capture to (optional
(matching the most amount possible)):
--------------------------------------------------------------------------------
\. '.'
--------------------------------------------------------------------------------
\d digits (0-9)
--------------------------------------------------------------------------------
)? end of (NOTE: because you are using a
quantifier on this capture, only the
LAST repetition of the captured pattern
will be stored in )
--------------------------------------------------------------------------------
| OR
--------------------------------------------------------------------------------
\d{6} digits (0-9) (6 times)
--------------------------------------------------------------------------------
) end of
--------------------------------------------------------------------------------
$ before an optional \n, and the end of the
string
我想在文本字段上使用正则表达式验证公式。这是纯正则表达式:
^(?!(?:\D*\d){7})\d+(\.\d{1,2})?$
当我在正则表达式在线工具(例如:https://regex101.com/)中测试这个表达式时,一切正常。 但是当我尝试像这样在 Orbeon 中使用它作为验证器时:
matches(string(.), '^(?!(?:\D*\d){7})\d+(\.\d{1,2})?$') or xxf:is-blank(string(.))
我收到错误 'Incorrect XPath expression'。
当我从正则表达式先行部分中删除后,我就可以使用它了。
matches(string(.), '^\d+(\.\d{1,2})?$') or xxf:is-blank(string(.))
Orbeon Forms 是否支持正则表达式先行? 正则表达式前瞻: https://www.regular-expressions.info/lookaround.html
重写表达式而不向前看。它匹配不超过 6 位的字符串。
使用
^(\d{1,4}(\.\d{1,2})?|\d{5}(\.\d)?|\d{6})$
解释
NODE EXPLANATION
--------------------------------------------------------------------------------
^ the beginning of the string
--------------------------------------------------------------------------------
( group and capture to :
--------------------------------------------------------------------------------
\d{1,4} digits (0-9) (between 1 and 4 times
(matching the most amount possible))
--------------------------------------------------------------------------------
( group and capture to (optional
(matching the most amount possible)):
--------------------------------------------------------------------------------
\. '.'
--------------------------------------------------------------------------------
\d{1,2} digits (0-9) (between 1 and 2 times
(matching the most amount possible))
--------------------------------------------------------------------------------
)? end of (NOTE: because you are using a
quantifier on this capture, only the
LAST repetition of the captured pattern
will be stored in )
--------------------------------------------------------------------------------
| OR
--------------------------------------------------------------------------------
\d{5} digits (0-9) (5 times)
--------------------------------------------------------------------------------
( group and capture to (optional
(matching the most amount possible)):
--------------------------------------------------------------------------------
\. '.'
--------------------------------------------------------------------------------
\d digits (0-9)
--------------------------------------------------------------------------------
)? end of (NOTE: because you are using a
quantifier on this capture, only the
LAST repetition of the captured pattern
will be stored in )
--------------------------------------------------------------------------------
| OR
--------------------------------------------------------------------------------
\d{6} digits (0-9) (6 times)
--------------------------------------------------------------------------------
) end of
--------------------------------------------------------------------------------
$ before an optional \n, and the end of the
string