使用正则表达式在特殊条件下进行名称验证

时间:2015-05-01 18:11:31

标签: java regex

我想验证Java中的Name,它允许单个时间{, - 。'}跟随特殊字符。我能够通过Expression实现,允许用户只在字符串中输入这样的特殊字符。但我无法弄清楚如何添加限制,用户无法再多次添加这些字符。我尝试使用量词来实现它,但仍然不成功。我已经完成了以下代码!

Pattern validator = Pattern.compile("^[a-zA-Z+\\.+\\-+\\'+\\,]+$");

2 个答案:

答案 0 :(得分:1)

您可以在正则表达式中使用前瞻断言:

Pattern validator = Pattern.compile(
  "^(?!(?:.*?\\.){2})(?!(?:.*?'){2})(?!(?:.*?,){2})(?!(?:.*?-){2})[a-zA-Z .',-]+$");

(?!(?:.*?[.',-]){2})是一个负向前瞻,这意味着在字符类中不允许超过1个字符。

RegEx Demo

答案 1 :(得分:0)

我认为您可以考虑这些字符只会发生一次的名称。名字如“Jonathan's”,“Thoms-Damm”,“Thoms,Jon”,“jonathan.thoms”。在实践中,我不认为这些特殊字符会出现在字符串的边缘。因此,您可以使用正则表达式来逃避:

模式验证器= Pattern.compile(“^ [a-zA-Z] +(?:[ - ',\。] [a-zA-Z] +)?$”);

此正则表达式应匹配常规ASCII名称,后跟可选的单个“特殊”字符,后面带有其他名称。