Java 如何确保不输入非ascii unicode字符?
给定一个java.lang.String实例,我想验证它不包含任何非ASCII字母数字的unicode字符。e、 g.管柱应限于[A-Za-z0-9]。我现在做的事情效率很低:Java 如何确保不输入非ascii unicode字符?,java,unicode,character-encoding,Java,Unicode,Character Encoding,给定一个java.lang.String实例,我想验证它不包含任何非ASCII字母数字的unicode字符。e、 g.管柱应限于[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.isAsciiAlphanume
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" );
}
import org.apache.commons.lang.CharUtils;
字符串s=。。。;
char[]ch=s.toCharArray();
对于(int i=0;i您可以使用
input.matches("[A-Za-z0-9.]+")
是的,有一个更好的方法来解决这个问题。您已经编写了模式,为什么不使用正则表达式来验证它呢?与其抛出包含无效字符的异常,不如使用一条通用错误消息,说“输入包含无效字符”(有效字符为a-z和0-9)”。尝试以下操作:
private boolean isBasicLatin(String input)
{
for (char c : input.toCharArray())
{
if (!UnicodeBlock.BASIC_LATIN.equals(UnicodeBlock.of(c)))
{
return false;
}
}
return true;
}
不,应该是!input.matches([^A-Za-z0-9.])
输入。matches([A-Za-z0-9.])
表示字符串的长度正好是一个字符。正则表达式应该是[A-Za-z0-9.]+
,或者[A-Za-z0-9.]*
如果允许长度为零的字符串。