正则表达式以验证带有符号前缀的用户名

时间:2018-12-05 10:21:56

标签: java android regex

要求:我需要将InputFilter放在EditText上,该{@ 1}接受具有某些限制的字段:

  1. 应该只接受[a-zA-Z0-9._]
  2. @可以或不能是第一个字符(我需要在名称后加上@作为前缀)
  3. 只能以字母数字[a-zA-Z0-9]开头,不能以[._]

当前我正在使用:

String regEx="[@]?(([a-zA-Z0-9]{0,1})?)+[a-zA-Z0-9._]*";

但是它接受[._]作为第一个字符。

有人可以帮我吗?

样本: 输入:-Mack->然后onTextChange我要添加@作为前缀,这不是必须的-> @Mack

现在,当我从每个文本删除剩余值的editText删除字符时,应该通过RegEx。 有了WiktorStribiżew的建议,我无法在@M之后进行检测。

2 个答案:

答案 0 :(得分:2)

模式中的([a-zA-Z0-9]{0,1})?部分与可选字母数字字符(1次或0次)匹配1次或0次。这意味着它可以匹配一个空字符串。

这里的重点是首先匹配可选的@,然后使用可选的模式序列:字母数字字符,后跟0+字母数字字符,._

@?(?:[a-zA-Z0-9][a-zA-Z0-9._]*)?

由于必须匹配整个输入,因此无需使用^$锚点。

详细信息

  • @?-可选的@
  • (?:[a-zA-Z0-9][a-zA-Z0-9._]*)?-匹配一系列模式的可选非捕获组:
    • [a-zA-Z0-9]-一个字母数字字符
    • [a-zA-Z0-9._]*-0个或多个字母数字字符,._

请参见regex demo

答案 1 :(得分:1)

我认为这应该对您有所帮助:

String regEx="@?(?:[a-zA-Z0-9][a-zA-Z0-9._]*)?"