我有一个正则表达式^[\\p{L}\\d._]*\\p{L}+[\\p{L}\\d._]*$
,这适用于
ABC123de
(字母数字 - 不论大小写)ABCDEfgh
(仅字母 - 无论大小写)Abc_.123
(只允许使用特殊字符_
和.
)
但是,它正在接受像这样的输入
balaji_,jacob_
(_
最后有)2balaji,2jacob
(以数字开头)
我们可以修改上面的正则表达式来限制上面的两个测试用例吗?
当然,像这样在开头和结尾添加适当的限制:
^\p{L}[\p{L}\d._]*\p{L}+[\p{L}\d._]*[\p{L}\d.]$
第一点:
^[\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.]?$.
如果需要以下划线开头的能力,我认为我们需要有关单字符串和双字符串的允许大小写的更多信息。