2015-06-30 50 views
2

我有一個輸入字段email1,我希望將它用於正則表達式進行驗證。當我在web上加載xpage時,它將反斜槓加到現有的反斜槓上(我認爲我應該在代碼中這樣做)。它也用我認爲是unicode的非字母數字替換。XPages validateConstraint正則表達式在網絡中的行爲很奇怪

<xp:td> 
    <xp:inputText value="#{document1.email}" id="email1" 
     required="true" styleClass="form-control"> 
    <xp:this.attrs> 
     <xp:attr name="placeholder" 
     value="Enter your email address"> 
     </xp:attr> 
    </xp:this.attrs> 
    <xp:this.validators> 
     <xp:validateRequired 
     message="Email is required"> 
     </xp:validateRequired> 
     <xp:validateConstraint 
     message="email not valid"> 
      <xp:this.regex><![CDATA[/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i]]></xp:this.regex> 
     </xp:validateConstraint> 
    </xp:this.validators> 
    </xp:inputText> 
</xp:td> 

這是呈現的HTML:

XSP.addOnLoad(function() { 
XSP.attachValidator("view:_id1:_id2:email1",new XSP.RequiredValidator("Email is required"),null,new XSP.RegExpValidator("/^\u0028[\\w-]+\u0028?:\\.[\\w-]+\u0029*\[email protected]\u0028\u0028?:[\\w-]+\\.\u0029*\\w[\\w-]{0,66}\u0029\\.\u0028[a-z]{2,6}\u0028?:\\.[a-z]{2}\u0029?\u0029$/i","email not valid")); 

我一直在使用正則表達式值的兩種形式的嘗試,利用靜態值和計算值,都失敗。

<xp:this.regex><![CDATA[#{javascript:/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i}]]></xp:this.regex> 

任何人都可以看到我做錯了什麼,並指出我在正確的方向。

回答

1

在正則表達式的末尾刪除前導 「/」 和 「/I」。然後它會工作。

<xp:this.regex><![CDATA[^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$]]></xp:this.regex> 

領先「/」已包含在內部,不幸的是修飾語,如「/I」(不區分大小寫的匹配)似乎並不工作。

不用擔心呈現的JavaScript代碼中的雙反斜槓和unicode字符。它們將被JavaScript解釋爲一個反斜槓和原始字符。

+0

謝謝,克努特!那工作。 – carlo