如何检查字符串是否只有番石榴中的字母数字字符?

时间:2014-10-22 14:44:23

标签: java guava

实际上,我想检查它是否只有字母数字加上这些:.- _ [space]

如果使用外部库我想使用Guava,因为它已经包含在我的项目中......

4 个答案:

答案 0 :(得分:9)

无Regexp且更具可读性(?)的解决方案可能正在使用Guava的CharMatcher类:

boolean matched = CharMatcher.JAVA_LETTER_OR_DIGIT.or(CharMatcher.WHITESPACE)
    .or(CharMatcher.anyOf("_.-")).matchesAllOf(yourString);

也许ASCII字符可以用于您的用例?如果是这样,请使用:

boolean matched = CharMatcher.ASCII.matchesAllOf(yourString);

有关示例和说明,请参阅wiki page

此外,您可能希望将匹配器提取为常量并预先计算它:

private static final CharMatcher CHAR_MATCHER = CharMatcher.JAVA_LETTER_OR_DIGIT
    .or(CharMatcher.WHITESPACE)
    .or(CharMatcher.anyOf("_.-"))
    .precomputed();

更有趣的是,如果您阅读CharMatcher的文档,您可能会发现Java中的"digit""letter""whitespace"相当暧昧的条款:

  

根据Java的定义确定字符是否为数字。如果您只想匹配ASCII数字,则可以使用inRange('0', '9')

  

根据Java的定义确定字符是否为字母。如果您只想匹配拉丁字母的字母,可以使用inRange('a', 'z').or(inRange('A', 'Z'))

所以你可能想要使用显式字符范围:

private static final CharMatcher CHAR_MATCHER_ASCII = 
    CharMatcher.inRange('0', '9')
        .or(CharMatcher.inRange('a', 'z'))
        .or(CharMatcher.inRange('A', 'Z'))
        .or(CharMatcher.anyOf(" _.-")) // note space here
        .precomputed();

答案 1 :(得分:1)

实际上你不需要任何图书馆。您可以使用普通Java的正则表达式来完成它。

正则表达式:([A-Za-z0-9\-\_\. ]+)

myStr.matches("([A-Za-z0-9\-\_\. ]+)");

答案 2 :(得分:0)

你不需要番石榴。只需将String#匹配为合适的regex

我......

str.matches("[1-9a-zA-Z.\\-_ ]*");

答案 3 :(得分:0)

[:alnum:] - Apache Regular Expression API的字母数字字符