如何对数值使用 f:validateRegex

How to use f:validateRegex on a numeric value

我将此正则表达式 ^(\+968|968|00968)?\d{8}$ 用于 phone 号码。必须是8位数字,以9或7开头。

<p:inputText value="#{customer.phoneNo}" maxlength="8" required="true" 
             validatorMessage="Phone Number Should be 8 digits and start with 9,7">
    <f:validateRegex pattern="^(\+968|968|00968)?\d{8}$"/>
    <f:validateLength minimum="8" maximum="8"/>
    <p:keyFilter mask="num"/>
</p:inputText>

但我收到此错误:

java.lang.Integer cannot be cast to java.lang.String

在 bean phone 中,数字是 Integer

表示java.lang.Integer不能java.lang.String需要转换

f:validateRegex 需要 String 值(或 CharSequence,具体取决于 JSF 实现),因此它不能用于 Integer。因此,您需要在 UI 中使用 String 值,并在将其保存到数据库之前将其转换为数字。如果您使用的是 JPA,则可以为此使用 AttributeConverter。但我必须说,在我看来,将 phone 数字存储为数字数据库字段是一个奇怪的选择。

另请参阅: