是否可以在cq:Widget(textarea)中使用正则表达式字段?

时间:2013-04-01 08:09:09

标签: cq5

我在属性编辑器中输入了有效的RegExp,但它不起作用。 属性名称是regex,它肯定存在于5.3和5.6中(我有5.5)。

我收到错误Uncaught TypeError: Object /^/content/trainingSite/(.*)$/ has no method 'test',我从javascript调试器看到,this.regex是一个字符串。当然,字符串没有test方法。

由于属性编辑器中没有RegExp类型,而CQ只是将widget的值转换为字符串,因此它不会以这种方式工作。我错过了什么吗?

3 个答案:

答案 0 :(得分:3)

在ExtJS表单字段中,只有TextField具有regexregexText属性。

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,它允许您提供一个可选的掩码,该掩码在用户输入字段时实时验证。

Related question

答案 1 :(得分:1)

我有一个类似的问题,只是提供值会抛出一个控制台错误说.test无效。当我用这种语法提供正则表达式值时,我的问题得到了解决:

regex="new RegExp(&quot;/content/dam/(.*)/(.*)&quot;)"

来自eclipse并在crxde-lite中导入或类似下面:

Name:regex Type:String Value:new RegExp("/content/(.*)/(.*)/(.*)")

答案 2 :(得分:0)

首先,我们可以将String.prototype.match与字符串参数一起使用。此外,至少在AEM6中,我们可以将正则表达式编写为字符串文字,并在两端使用斜杠:"/^\\/content\\/trainingSite\\/(.*)$/",它将正常工作。