如何确保没有输入非ascii unicode字符?

时间:2010-04-26 10:28:52

标签: java unicode character-encoding

给定一个java.lang.String实例,我想验证它不包含任何非ASCII字母数字的unicode字符。例如该字符串应限于[A-Za-z0-9。]。我现在正在做的事情是非常低效的:

import org.apache.commons.lang.CharUtils;

String s = ...;
char[] ch = s.toCharArray();
for( int i=0; i<ch.length; i++)
{
    if( ! CharUtils.isAsciiAlphanumeric( ch[ i ] )
        throw new InvalidInput( ch[i] + " is invalid" );
}

有没有更好的方法来解决这个问题?

3 个答案:

答案 0 :(得分:3)

您可以使用

input.matches("[A-Za-z0-9.]+")

答案 1 :(得分:1)

是的,有更好的方法来解决这个问题。您已经编写了模式,那么为什么不使用正则表达式来验证它?您也可以使用一般性错误消息来说明“输入包含无效字符(有效字符为a-z和0-9)”这一行,而不是抛出包含无效字符的异常。

答案 2 :(得分:0)

试试这个:

private boolean isBasicLatin(String input)
{
    for (char c : input.toCharArray())
    {
        if (!UnicodeBlock.BASIC_LATIN.equals(UnicodeBlock.of(c)))
        {
            return false;
        }
    }

    return true;
}