我想验证Java中的Name,它允许单个时间{, - 。'}跟随特殊字符。我能够通过Expression实现,允许用户只在字符串中输入这样的特殊字符。但我无法弄清楚如何添加限制,用户无法再多次添加这些字符。我尝试使用量词来实现它,但仍然不成功。我已经完成了以下代码!
Pattern validator = Pattern.compile("^[a-zA-Z+\\.+\\-+\\'+\\,]+$");
答案 0 :(得分:1)
您可以在正则表达式中使用前瞻断言:
Pattern validator = Pattern.compile(
"^(?!(?:.*?\\.){2})(?!(?:.*?'){2})(?!(?:.*?,){2})(?!(?:.*?-){2})[a-zA-Z .',-]+$");
(?!(?:.*?[.',-]){2})
是一个负向前瞻,这意味着在字符类中不允许超过1个字符。
答案 1 :(得分:0)
我认为您可以考虑这些字符只会发生一次的名称。名字如“Jonathan's”,“Thoms-Damm”,“Thoms,Jon”,“jonathan.thoms”。在实践中,我不认为这些特殊字符会出现在字符串的边缘。因此,您可以使用正则表达式来逃避:
模式验证器= Pattern.compile(“^ [a-zA-Z] +(?:[ - ',\。] [a-zA-Z] +)?$”);
此正则表达式应匹配常规ASCII名称,后跟可选的单个“特殊”字符,后面带有其他名称。