2015-06-10 36 views
2

我想驗證使用Adobe CQ5一個文本框內部的URL,所以我設置的屬性正則表達式和regexText像往常一樣,但由於某種原因不能正常工作:設置正則表達式驗證在Adobe CQ5 URL格式

   <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"/>

因此,當我在組件內部I型可以在控制檯中看到的錯誤消息:

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

爲了更準確的錯誤來源於此行:

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

我試了正則表達式和他們沒有工作。我想這個問題是正則表達式本身,因爲在另一方面,我有這等正則表達式來評估電子郵件地址,和它的作品完美的罰款:

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

有什麼建議?提前致謝。

+1

看起來'/'是工具中的分隔符。在你的正則表達式中,你使用「http://」,所以我的猜測是'//'的第一個斜槓被解釋爲正則表達式的結尾。其餘的則會引發一個錯誤......是否有某種方法可以避免使用您的語言中的斜槓? – fkorsa

+0

我試着按照你的建議修改正則表達式: ^(http:\/\/www。| https:\/\/www。| http:\/\/| https:\/\ /] [a-z0 -9] +([ - ] {1} [A-Z0-9] +。)* [AZ] {2,5-}。?(:[0-9] {1,5})(\ /.* )?$ 但是相同的結果:( –

+0

我在C++中試過了你的正則表達式,它工作得很好,也許試着兩次跳過斜線,就像這樣:「http:\\/\\\ /」? – fkorsa

回答

3

您的正則表達式的語法似乎將正斜槓(/)視爲特殊字符。既然你想解析一個包含斜線的URL,我猜你應該像這樣兩次轉義它們:'\\ /'而不是'/'。其結果將是:

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

你需要躲避他們兩次,因爲字符串編譯爲正則表達式必須包含「\ /」逃脫斜線,但在你有一個字符串引進一個反斜槓以避免反斜槓本身。