Java使用正则表达式验证输入字符串

16

g.:

String string="Marc Louie, Garduque Bautista";

我想检查一个字符串是否只包含单词、逗号和空格。我尝试使用正则表达式,最接近的是这个:

String pattern = "[a-zA-Z]+(\\s[a-zA-Z]+)+";

但它并没有检查那里是否有逗号。有什么建议吗?


2
是一个逗号,还是多个逗号? - Michael W
“单词”对你来说意味着什么?我看到你的例子中有名字,这种情况下,“Skłodowska-Curie”也是一个“单词”,但它包含了破折号,超出了[a-zA-Z]范围。可能还有几个这样的特殊情况(例如上面的重音符号)。 - Adam Dyga
5个回答

30

您需要使用该模式。

^[A-Za-z, ]++$
例如
public static void main(String[] args) throws IOException {
    final String input = "Marc Louie, Garduque Bautista";
    final Pattern pattern = Pattern.compile("^[A-Za-z, ]++$");
    if (!pattern.matcher(input).matches()) {
        throw new IllegalArgumentException("Invalid String");
    }
}

编辑

根据迈克尔的敏锐评论,原帖作者可能是指单个逗号,在这种情况下:

^[A-Za-z ]++,[A-Za-z ]++$

应该工作。


2
为什么不简单地使用以下方法:
"[a-zA-Z\\s,]+"

2
\s 匹配的不仅仅是空格。 - Boris the Spider
\s 匹配所有空格(例如制表符等)。 - Petar Ivanov

1
使用这个将会最好。
"(?i)[a-z,\\s]+"

0
如果你的意思是“一些单词,任何空格和一个逗号,无论它出现在哪里”,那么我的建议是采用以下方法:
"^[^,]* *, *[^,]*$"

这意味着“从零个或多个不是逗号的字符开始,然后可以找到零个或多个空格,然后是逗号,然后再次是零个或多个空格,最后再次是零个或多个不是逗号的字符”。

-1

在Java中验证字符串,其中开头和结尾没有特殊字符,但可能在中间有一些特殊字符。

String strRGEX = "^[a-zA-Z0-9]+([a-zA-Z0-9-/?:.,\'+_\\s])+([a-zA-Z0-9])$";
        String toBeTested= "TesADAD2-3t?S+s/fs:fds'f.324,ffs";
        boolean testResult= Pattern.matches(strRGEX, toBeTested);
        System.out.println("Test="+testResult);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接