我在属性编辑器中输入了有效的RegExp,但它不起作用。
属性名称是regex
,它肯定存在于5.3和5.6中(我有5.5)。
我收到错误Uncaught TypeError: Object /^/content/trainingSite/(.*)$/ has no method 'test'
,我从javascript调试器看到,this.regex
是一个字符串。当然,字符串没有test
方法。
由于属性编辑器中没有RegExp类型,而CQ只是将widget的值转换为字符串,因此它不会以这种方式工作。我错过了什么吗?
答案 0 :(得分:3)
在ExtJS表单字段中,只有TextField具有regex
和regexText
属性。
ExtJS表单字段的通用验证框架是vtypes (= validation types):
var config = {
xtype: "textfield",
fieldLabel: "Path:",
vtype: "my_path_structure"
}
vtypes需要在CQ.Ext.form.VTypes
注册:
CQ.Ext.form.VTypes["my_path_structure"] = /^/content/trainingSite/(.*)$/;
CQ.Ext.form.VTypes["my_path_structureText"] = "Invalid path";
<name>
)可以是函数或javascript正则表达式。<name>Text
条目。<name>Mask
,它允许您提供一个可选的掩码,该掩码在用户输入字段时实时验证。答案 1 :(得分:1)
我有一个类似的问题,只是提供值会抛出一个控制台错误说.test无效。当我用这种语法提供正则表达式值时,我的问题得到了解决:
regex="new RegExp("/content/dam/(.*)/(.*)")"
来自eclipse并在crxde-lite中导入或类似下面:
Name:regex Type:String Value:new RegExp("/content/(.*)/(.*)/(.*)")
答案 2 :(得分:0)
首先,我们可以将String.prototype.match
与字符串参数一起使用。此外,至少在AEM6中,我们可以将正则表达式编写为字符串文字,并在两端使用斜杠:"/^\\/content\\/trainingSite\\/(.*)$/"
,它将正常工作。