使用破折号和单引号验证名称字符串

ree*_*nes 2 java regex

我正在尝试使用以下规范验证字符串:

"Non-empty string that contains only letters, dashes, or single quotes"

我正在使用,String.matches("[a-zA-Z|-|']*")但它没有-正确捕捉角色.例如:

Test         Result  Should Be
==============================
shouldpass   true    true
fail3        false   false
&fail        false   false
pass-pass    false   true
pass'again   true    true
-'-'-pass    false   true
Run Code Online (Sandbox Code Playgroud)

所以"传球"和" - ' - '传球"都失败了.我的正则表达式做错了什么?

Wik*_*żew 5

你应该使用以下正则表达式:

[a-zA-Z'-]+
Run Code Online (Sandbox Code Playgroud)

你正则表达式是允许的文字|,你有规定的范围,从||.连字符必须放在字符类的结尾或开头,如果要匹配文字连字符,则必须在中间转义.最后的+量化器将确保字符串非空.

另一种方法是包含所有Unicode字母:

[\p{L}'-]+
Run Code Online (Sandbox Code Playgroud)

Java字符串:"[\\p{L}'-]+".

  • 使用`matches()`方法不需要`^`和`$`. (2认同)