f:validateRegex不';输入无效字符后,不显示任何消息
我正在使用JSF。带有用于验证的代码:f:validateRegex不';输入无效字符后,不显示任何消息,regex,jsf,Regex,Jsf,我正在使用JSF。带有用于验证的代码: <h:inputText id="sender" value="#{contactForm.sender}"> <f:validateRegex pattern="([a-zA-Z_0-9]).{4,32}" /> </h:inputText> 当我键入字符串时:abc。结果无效。好。 然后我键入:abcd@。我认为,该字符串无效,因为该字符串包含@letter。但我没有收到任何信息。这意味着该字符串是
<h:inputText id="sender" value="#{contactForm.sender}">
<f:validateRegex pattern="([a-zA-Z_0-9]).{4,32}" />
</h:inputText>
当我键入字符串时:abc。结果无效。好。
然后我键入:abcd@。我认为,该字符串无效,因为该字符串包含@letter。但我没有收到任何信息。这意味着该字符串是有效的。我不太明白正则表达式。您能帮忙吗?
不是客户端的,而是服务器端的。发布一个
并发送包含此
的表单,以查看生成的消息,查找您的发送者组件的错误值
例如:
<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>
此外,正如DavidStarkey在评论中所说,您的正则表达式与abcd@
匹配。如果要在regexp中使用点(
),请在其前面使用反斜杠(\
):
<f:validateRegex pattern="([a-zA-Z_0-9])\.{4,32}" />
更多信息:
不是用于客户端,而是用于服务器端。发布一个
并发送包含此
的表单,以查看生成的消息,查找您的发送者组件的错误值
例如:
<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>
此外,正如DavidStarkey在评论中所说,您的正则表达式与abcd@
匹配。如果要在regexp中使用点(
),请在其前面使用反斜杠(\
):
<f:validateRegex pattern="([a-zA-Z_0-9])\.{4,32}" />
更多信息:
您忘记转义与输入字符串中任何字符匹配的
元字符
([a-zA-Z_0-9]).{4,32}
// ^
// |
// |
// Notice the dot . this matches any character
因此,正则表达式将匹配任何以小写、大写字符或下划线开头的字符串,或是介于0
和9
之间的数字,后跟任何重复4到32次的字符,因此这几乎匹配任何字符
要解决此问题,您必须避开点
,并包含在第一组中,类似于以下内容,-当然,您可以使用\w
而不是[a-zA-Z_0-9]
,因为它们也是一样的东西-:
点必须位于组内,否则表达式将匹配任何以相同开头但包含4到32个点的字符串,而现在它将匹配任何包含字母字符、数字、点或下划线的字符串,长度介于4到32个字符之间。您忘记转义与输入字符串中任何字符匹配的
元字符
([a-zA-Z_0-9]).{4,32}
// ^
// |
// |
// Notice the dot . this matches any character
因此,正则表达式将匹配任何以小写、大写字符或下划线开头的字符串,或是介于0
和9
之间的数字,后跟任何重复4到32次的字符,因此这几乎匹配任何字符
要解决此问题,您必须避开点
,并包含在第一组中,类似于以下内容,-当然,您可以使用\w
而不是[a-zA-Z_0-9]
,因为它们也是一样的东西-:
点必须进入组内,否则表达式将匹配任何以相同开头但随后包含4到32个点的字符串,而现在它将匹配任何包含字母字符、数字或长度在4到32个字符之间的点或下划线的字符串。在正则表达式中,
表示任何字符,包括@
。如果需要文字句点,请使用\。
在正则表达式中,
表示任何字符,包括@
。如果您想要一个文字句点,请使用\.
或只需输入
,以便在每次键控时都对其进行验证。但毕竟,我相信这不是OP的具体问题。很抱歉让你误解了。我知道并使用了h:信息。这段代码只是用来回答我关于正则表达式的问题。谢谢你answer@LostHeaven0809我认为如果您为您的输入发布一个已接受和已拒绝字符串的示例,那么我们可以帮助您定义regexp。感谢您的回答。或者只需输入
,以便在每次键控时都对其进行验证。但毕竟,我相信这不是OP的具体问题。很抱歉让你误解了。我知道并使用了h:信息。这段代码只是用来回答我关于正则表达式的问题。谢谢你answer@LostHeaven0809我认为如果您为您的输入发布一个接受和拒绝字符串的示例会更好,这样我们可以帮助您定义regexp。谢谢您的回答。对。谢谢你的回答。谢谢你的回答。