0

我有一个正则表达式^[\\p{L}\\d._]*\\p{L}+[\\p{L}\\d._]*$ ,这适用于

  1. ABC123de(字母数字 - 不论大小写)
  2. ABCDEfgh(仅字母 - 无论大小写)
  3. Abc_.123(只允许使用特殊字符_.

但是,它正在接受像这样的输入

  1. balaji_,jacob__最后有)
  2. 2balaji,2jacob(以数字开头)

我们可以修改上面的正则表达式来限制上面的两个测试用例吗?

4

2 回答 2

1

当然,像这样在开头和结尾添加适当的限制:

^\p{L}[\p{L}\d._]*\p{L}+[\p{L}\d._]*[\p{L}\d.]$
于 2012-07-20T10:16:56.837 回答
0

第一点:

^[\p{L}\d._]*\p{L}+[\p{L}\d._]*$

has*允许个或多个,首先修复问题 #2 将其更改为+一个或多个:

^[\p{L}\d._]+\p{L}+[\p{L}\d._]*$.

为了防止最后出现下划线,需要另一个不包括的子句_

^[\p{L}\d._]+\p{L}+[\p{L}\d._]*[\p{L}\d.]?$.

但这仍然允许 a_单独(仅从第一部分匹配)。如果您不想要唯一的下划线,只需从第一个子句中删除:

^[\p{L}\d.]+\p{L}+[\p{L}\d._]*[\p{L}\d.]?$.

如果需要以下划线开头的能力,我认为我们需要有关单字符串和双字符串的允许大小写的更多信息。

于 2012-07-20T10:18:49.550 回答