用于字符串匹配的Java正则表达式,应仅包含字母数字和" - "

Siv*_*udi -1 java regex

我需要在java中添加正则表达式来测试字符串是否只包含字母数字(带或不带" - ").例如:

ADB123
ABC-D1
12ABCD
A-BCD1   
Run Code Online (Sandbox Code Playgroud)

等等

Pet*_*rey 7

你可以试试

for (String s : "ADB123,ABC-D1,12ABCD,A-BCD1,abcd12,a.b.c,12£".split(",")) {
    boolean ok = s.matches("[-\\p{Alnum}]+");
    System.out.println(s + " is ok: " + ok);
}
Run Code Online (Sandbox Code Playgroud)

版画

ADB123 is ok: true
ABC-D1 is ok: true
12ABCD is ok: true
A-BCD1 is ok: true
abcd12 is ok: true
a.b.c is ok: false
12£ is ok: false
Run Code Online (Sandbox Code Playgroud)

正则表达式[-\\p{Alnum}]+意味着

  • [ ]+ 表示任何一个或多个字符.
  • -在开始时意味着-不是,而不是别的东西.
  • \\在字符串中,字面意思变成了\一个转义字符.
  • \p{Alnum} 是预定义的字母和数字字符列表.

有关更多详细信息,请参阅Pattern的文档.