2013-08-22 51 views
0

我正在使用JSF。用驗證碼:f:在輸入無效字符後,validateRegex不顯示任何消息

<h:inputText id="sender" value="#{contactForm.sender}"> 
     <f:validateRegex pattern="([a-zA-Z_0-9]).{4,32}" /> 
</h:inputText> 

當我鍵入一個字符串:abc。結果是無效的。好。 然後我鍵入:abcd @。我想,該字符串是無效的,因爲該字符串包含@字母。但我沒有收到任何消息。這意味着該字符串是有效的。我不明白正則表達式。你能幫我嗎?

+2

在正則表達式中,'.'表示任何字符,包括'@'。如果你想要一個文字週期,可以使用'\ .' –

回答

2

您忘記轉義與輸入字符串中的任何字符匹配的.元字符

([a-zA-Z_0-9]).{4,32} 
//   ^
//   | 
//   | 
//  Notice the dot . this matches any character 

所以,你的正則表達式匹配任何字符串開頭小寫字母,大寫字母或下劃線_09其次是4至32次重複任何字符之間的數,所以這幾乎是任何匹配。

爲了解決這個問題,你必須逃脫點.,包括在第一組中,類似於以下,- 當然你可以使用\w代替[a-zA-Z_0-9],因爲他們是同樣的事情 -

([\w\.]){4,32} 

.點具有去組內或表達將匹配任何字符串開始與以前一樣,但然後4個32點之間含有的,而現在它將匹配包含字母字符或數字或任何串點或下劃線,長度在4到32個字符之間。

+1

對。謝謝你的回答。 –

+0

@ LostHeaven0809不客氣,很高興提供幫助。 –

2

<f:validateRegex>不適用於客戶端,但適用於服務器端。發佈<h:messages>併發送包含此<h:inputText>的表單,以查看生成的消息中sender組件的錯誤值。

例子:

<h:form> 
    Input the data: 
    <h:inputText id="sender" value="#{contactForm.sender}"> 
     <f:validateRegex pattern="([a-zA-Z_0-9]).{4,32}" /> 
    </h:inputText> 
    <h:commandButton value="Submit" /> 
    <h:messages /> 
</h:form> 

正如意見建議的BalusC,你可以火用ajax的onkeyup事件您輸入的驗證。

<h:form> 
    Input the data: 
    <h:inputText id="sender" value="#{contactForm.sender}"> 
     <f:validateRegex pattern="([a-zA-Z_0-9]).{4,32}" /> 
     <f:ajax event="keyup" render="messageId" /> 
    </h:inputText> 
    <h:message id="messageId" for="sender" /> 
</h:form> 

此外,正如DavidStarkey發表評論,您的正則表達式匹配[email protected]。如果你想用一個點(.)作爲正則表達式的一部分,使用反斜槓(\)之前它:

<f:validateRegex pattern="([a-zA-Z_0-9])\.{4,32}" /> 

更多信息:

+1

或者只是引入'',這樣它就可以在每個鍵盤上進行驗證。但畢竟,我認爲這不是OP的具體問題。 – BalusC

+0

對不起,讓你誤會。我知道,我用h:消息。這段代碼僅用於我關於正則表達式的問題。感謝您的回答 –

+0

@ LostHeaven0809我認爲這將是更好,如果你發佈你輸入的接受和拒絕的字符串的例子,我們可以幫助你定義的正則表達式 –

相關問題