在 Adob​​e CQ5 中设置正则表达式以验证 URL 格式

Setting regular expression to validate URL format in Adobe CQ5

我想使用 Adob​​e CQ5 验证文本字段内的 URL,所以我像往常一样设置属性 regex 和 regexText,但由于某些原因不起作用:

                <facebook
                    jcr:primaryType="cq:Widget"
                    emptyText="http://www.facebook.com/account-name"
                    fieldDescription="Set the Facebook URL"
                    fieldLabel="Facebook"
                    name="./facebookUrl"
                    regex="/^(http://www.|https://www.|http://|https://)[a-z0-9]+([-.]{1}[a-z0-9]+)*.[a-z]{2,5}(:[0-9]{1,5})?(/.*)?$/"
                    regexText="Invalid URL format"
                    xtype="textfield"/>

所以当我在组件内部输入时,我可以在控制台看到一条错误消息:

Uncaught TypeError: this.regex.test is not a function

更准确地说,错误来自这一行:

        if (this.regex && !this.regex.test(value)) {

我尝试了几个正则表达式,其中 none 行得通。我想问题出在正则表达式本身,因为另一方面我有另一个正则表达式来评估电子邮件地址,它工作得很好:

/^[A-za-z0-9]+[\._]*[A-za-z0-9]*@[A-za-z.-]+[\.]+[A-Za-z]{2,4}$/

有什么建议吗?提前致谢。

您的正则表达式的语法似乎将正斜杠 (/) 视为特殊字符。由于您想解析包含斜杠的 URL,我猜您应该像这样将它们转义两次:'\\/' 而不是 '/'。结果将是:

/^(http:\/\/www.|https:\/\/www.|http:\/\/|https:\/\/)[a-z0-9]+([-.]{1}[a-z0-9]+)‌​*.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/

您需要将它们转义两次,因为要编译为正则表达式的 字符串 必须包含 '\/' 以转义斜杠,但要在字符串中引入反斜杠,您也必须转义反斜杠本身。