我正在编写一个简单的android应用程序,用于将您喜欢的游戏保存在列表中。
在第一个屏幕中,用户必须输入他的gamertag
(作为String
)。玩家标签只能包含letters
,a-z (uppercase and lowercase)
和numbers (0-9)
中的underscores/hpyhens (_ and -)
。
我可以使它在每个位置都可以使用underscore
或在开始时使用hyphen
。但是,如果String
在中间包含一个hyphen
,则会将"split
“分成两部分,而如果hyphen
在末尾,它将是独立的。
我想到了这个regex
:
[a-zA-Z0-9_\-]\w+
在Java中看起来有点不同,因为\需要转义:
[a-zA-Z0-9_\\-]\\w+
Gamertags
应该验证:
- GamerTag
- Gamer_Tag
- _GamerTag
- GamerTag_
- -GamerTag
- Gamer-Tag
- GamerTag-
Gamertags
不应验证:
- !GamerTag
- Gamer%Tag
- Gamer Tag
Gamertags
应该可以验证,但是我的regex
失败:
- Gamer-Tag
- GamerTag-
答案 0 :(得分:6)
您的模式[a-zA-Z0-9_\-]\w+
匹配字符类中的1个字符,然后是与\w
不匹配的单词字符-
的1+倍。
您可以在出现连字符的位置重复字符类1次以上,如果连字符位于字符类的末尾,则不必对其进行替换。
[a-zA-Z0-9_-]+
Gamer-Tag
未拆分,但有2个匹配项。字符类与G
相匹配,而\w+
与amer
相匹配。然后在下一个匹配项中,字符类匹配-
,而\w+
匹配Tag
。
如果仅允许这些值,则可以使用锚点^
来声明字符串的开始,并使用$
来声明字符串的结尾。
^[a-zA-Z0-9_-]+$