Как обеспечить, чтобы не были введены не-ascii символы Юникода? - PullRequest
2 голосов
/ 26 апреля 2010

Учитывая экземпляр java.lang.String, я хочу убедиться, что он не содержит символов Юникода, которые не являются буквенно-цифровыми символами ASCII. например Строка должна быть ограничена [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 ]

3 голосов
/ 26 апреля 2010

Вы можете использовать

input.matches("[A-Za-z0-9.]+")
1 голос
/ 26 апреля 2010

Да, есть лучший способ решить это. Вы уже написали шаблон, так почему бы не использовать регулярное выражение для его проверки? Вместо того, чтобы выдавать исключение, содержащее недопустимый символ, вы можете просто использовать общее сообщение об ошибке, в котором говорится что-то вроде «input содержит недопустимые символы (допустимые символы a-z и 0-9)».

0 голосов
/ 26 апреля 2010

Попробуйте это:

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

    return true;
}
...