f:validateRegex不';输入无效字符后,不显示任何消息

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。但我没有收到任何信息。这意味着该字符串是

我正在使用JSF。带有用于验证的代码:

<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。谢谢您的回答。对。谢谢你的回答。谢谢你的回答。