我通过检查某些字符是否存在来测试字符串是否有效/无效。包含 ; 的字符串 # / % = | + \ " < > 被视为无效。我目前在 Java 中有以下实现,但我更喜欢更优雅的正则表达式解决方案。
public boolean isStringValid(String name) {
if ( name.contains(";")
|| name.contains("#")
|| name.contains("/")
|| name.contains("%")
|| name.contains("=")
|| name.contains("|")
|| name.contains("+")
|| name.contains("\\")
|| name.contains("\"")
|| name.contains("<")
|| name.contains(">")) {
return false;
}
else {
return true;
}
}
我所做的是将其更改为以下内容,
public boolean isNameValid(String name) {
return !Pattern.matches(".*(;|#|/|%|=|\\||\\+|\\\\|\"|<|>)+.*", name);
}
但我似乎无法正确获取正则表达式字符串。添加所有Java转义字符之前的原始正则表达式字符串如下,
.*(;|#|/|%|=|\||\+|\\|"|<|>)+.*
使用像 [Az] 这样的字符类似乎不是一个选项,因为像“d@vik”这样的名称在我的情况下应该被认为是有效的。