【发布时间】:2020-04-22 19:39:27
【问题描述】:
下面提到的正则表达式用于验证 Java 中的用户输入。
username.matches("^\\p{L}+[\\p{L}\\p{Z}.']+")
正则表达式对多个字符输入有效,但对单个字符输入无效。
由于“+”表示一个和多个字符,我很困惑如何支持一个字符输入作为有效输入。
【问题讨论】:
下面提到的正则表达式用于验证 Java 中的用户输入。
username.matches("^\\p{L}+[\\p{L}\\p{Z}.']+")
正则表达式对多个字符输入有效,但对单个字符输入无效。
由于“+”表示一个和多个字符,我很困惑如何支持一个字符输入作为有效输入。
【问题讨论】:
这是因为您的正则表达式中的两个部分都需要至少一个字符(请参阅几乎在正则表达式末尾的+)。如果您希望该部分是可选的,则应改为 *。
【讨论】:
您拥有的正则表达式将匹配 2 个或更多符号。原因是,这是一个(或多个)符号:
\\p{L}+
这是符号 2(或更多):
[\\p{L}\\p{Z}.']+
您很可能希望最后一部分为“0 或更多”,如下所示:
"^\\p{L}+[\\p{L}\\p{Z}.']*"
【讨论】:
您的正则表达式至少需要 2 个字符。
"^\p{L}+" - 最少 1
"[\p{L}\p{Z}.']+" - 最少 1
“+”确实表示一个或多个字符。
【讨论】: