Java JSF<;f:validateRegex模式

Java JSF<;f:validateRegex模式,java,regex,validation,jsf,jsf-2,Java,Regex,Validation,Jsf,Jsf 2,我不能理解这一点: <f:validateRegex pattern="((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}" /> 请有人给我解释一下,(\(\d{3}\)?)(\d{3}-)?\d{3}-\d{4}是美国电话号码的正则表达式,形式如下: 555-555-5555或(555)555-5555或555-5555 首先,\d表示数字 这部分(\(\d{3}\)?)|(\d{3}-)?表示(555)或555-,一次或一次都没有。分解 (

我不能理解这一点:

<f:validateRegex pattern="((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}" /> 

请有人给我解释一下,

(\(\d{3}\)?)(\d{3}-)?\d{3}-\d{4}
是美国电话号码的正则表达式,形式如下:

555-555-5555
(555)555-5555
555-5555

首先,
\d
表示数字

这部分
(\(\d{3}\)?)|(\d{3}-)?
表示
(555)
555-
,一次或一次都没有。分解

   (       (\(\d{3}\) ?)            |            (\d{3}-)     )   ?

( (3 digits with () ?- once or no)  |-OR  (three digits plus - ) ) ?-once or none
这部分
\d{3}-
表示
555-
(三位数加-)

这部分
\d{4}
表示
5555
(四位数字)

顺便说一句,
5
只是任何数字的占位符