对字符串进行验证之前先进行规范化
应用系统中经常对字符串会进行各种规则的验证,不过由于字符串信息在java6中是基于unicode的4.0版本的,而java7则是unicode的6.0.0版本。
unicode的规范化格式有几种,每种的处理方式有些不一样。
NFC
Unicode 规范化格式 C。如果未指定 normalization-type,那么会执行 Unicode 规范化。
NFD
Unicode 规范化格式 D。
NFKC
Unicode 规范化格式 KC。
NFKD
Unicode 规范化格式 KD。
如果我们对输入字符串先进行验证,再规范化,Normalizer.normalize将unicode的文本转成等价的规范化格式内容,下面这个用Pattern.compile("[<>]")验证不通过,
// String s may be user controllable
// \uFE64 is normalized to < and \uFE65 is normalized to > using NFKC
String s = "\uFE64" + "script" + "\uFE65";
// Validate
Pattern pattern = Pattern.compile("[<>]"); // Check for angle brackets
Matcher matcher = pattern.matcher(s);
if (matcher.find()) {
// Found black listed tag
throw new IllegalStateException();
} else {
// . . .
}
// Normalize
s = Normalizer.normalize(s, Form.NFKC);
如果对输入字符串先进行规范化在进行验证,使用Pattern.compile("[<>]")验证就能正确判断出来,抛出IllegalStateException异常,正确过滤有问题的输入文本,
String s = "\uFE64" + "script" + "\uFE65";
// Normalize
s = Normalizer.normalize(s, Form.NFKC);
// Validate
Pattern pattern = Pattern.compile("[<>]");
Matcher matcher = pattern.matcher(s);
if (matcher.find()) {
// Found black listed tag
throw new IllegalStateException();
} else {
// . . .
}
java中的Normalizer类
public final class Normalizer {
private Normalizer() {};
/**
* This enum provides constants of the four Unicode normalization forms
* that are described in
* <a href="http://www.unicode.org/unicode/reports/tr15/tr15-23.html">
* Unicode Standard Annex #15 — Unicode Normalization Forms</a>
* and two methods to access them.
*
* @since 1.6
*/
public static enum Form {
/**
* Canonical decomposition.
*/
NFD,
/**
* Canonical decomposition, followed by canonical composition.
*/
NFC,
/**
* Compatibility decomposition.
*/
NFKD,
/**
* Compatibility decomposition, followed by canonical composition.
*/
NFKC
}
/**
* Normalize a sequence of char values.
* The sequence will be normalized according to the specified normalization
* from.
* @param src The sequence of char values to normalize.
* @param form The normalization form; one of
* {@link java.text.Normalizer.Form#NFC},
* {@link java.text.Normalizer.Form#NFD},
* {@link java.text.Normalizer.Form#NFKC},
* {@link java.text.Normalizer.Form#NFKD}
* @return The normalized String
* @throws NullPointerException If <code>src</code> or <code>form</code>
* is null.
*/
public static String normalize(CharSequence src, Form form) {
return NormalizerBase.normalize(src.toString(), form);
}
/**
* Determines if the given sequence of char values is normalized.
* @param src The sequence of char values to be checked.
* @param form The normalization form; one of
* {@link java.text.Normalizer.Form#NFC},
* {@link java.text.Normalizer.Form#NFD},
* {@link java.text.Normalizer.Form#NFKC},
* {@link java.text.Normalizer.Form#NFKD}
* @return true if the sequence of char values is normalized;
* false otherwise.
* @throws NullPointerException If <code>src</code> or <code>form</code>
* is null.
*/
public static boolean isNormalized(CharSequence src, Form form) {
return NormalizerBase.isNormalized(src.toString(), form);
}
}
分享到:
相关推荐
在进行数据交互时,我们常常需要检查一个字符串是否符合JSON的格式规范,这就是`C语言检测字符串是否为json字符串`这个主题所关注的问题。 C语言本身并不直接支持JSON解析,因此我们需要借助第三方库或者自定义函数...
- **验证JSON**:检查输入的字符串是否符合JSON规范,确保数据的正确性。 - **美化输出**:提供颜色高亮,使键、值、引号等关键元素更加突出,提高阅读体验。 - **复制/粘贴功能**:方便用户快速复制格式化后的...
在软件开发过程中,字符串处理是必不可少的部分,特别是在安装脚本中,需要对用户输入、路径、文件名等进行各种字符串操作。 这份文档详细介绍了InstallShield内部库中的字符串函数,这些函数涵盖了字符串的创建、...
通过对JSON字符串与实体类之间进行严格验证,可以有效地提高数据的一致性和准确性,减少因数据格式错误而导致的运行时错误。本文介绍了如何使用 `Newtonsoft.Json.Schema` 库实现这一目标,包括生成JSON Schema、...
描述中提到的"在cjson基础上,实现了字符串与结构体自动相互转化的功能",意味着这个项目是基于现有的开源库cjson进行扩展的。cjson是一个用C语言编写的轻量级JSON解析器和生成器,能够处理JSON格式的数据,将其转换...
JSON字符串验证可能遇到的问题有: - 键值对中的键未用双引号括起。 - 值的类型不正确,如使用了函数、日期或其他非JSON支持的类型。 - 缺少逗号或冒号。 - 对象或数组没有正确关闭的括号。 - 未转义的特殊字符,如...
"字符串过滤工具类"就是针对这样的需求而设计的,它提供了一种便捷的方式来对字符串中的特定关键字进行过滤,以达到安全、合规或者优化显示的目的。下面将详细解释这个工具类的核心知识点。 首先,字符串过滤工具类...
在编程领域,字符串大小写转换是一项常见的操作,尤其在处理用户输入、文本分析或格式化输出时显得尤为重要。本文将详细讲解字符串大小写转换的概念、常见编程语言中的实现方法以及其在实际应用中的价值。 一、字符...
例如,在实际开发中,开发者可能会使用在线的JSON格式化和解析工具,如JSONLint,来验证JSON字符串的正确性,或者使用浏览器的开发者工具(如Chrome的DevTools)中的Console来快速测试JSON.parse()。 至于...
在Oracle数据库管理中,为了确保连接字符串的正确性,经常需要对连接字符串进行格式校验。本文将详细介绍如何通过编程方式来解析并验证一个标准的Oracle登录字符串(`user/pwd@dbservname`)的格式是否正确。 #### ...
该函数用于验证整个字符串中的所有字符是否均合法。若字符串中存在不合法字符,则返回 `false`;否则返回 `true`。 ### 五、综合应用 通过上述几个函数的配合使用,可以在 Web 应用程序中实现对用户输入的有效验证...
综上所述,验证自定义特殊字符是软件开发中的一个重要环节,它涵盖了字符串处理、正则表达式、编码规范、安全防护等多个技术领域。在实际应用中,开发者需要根据具体需求,灵活运用各种工具和技术,确保数据的有效性...
4. **字符串加密解密**:保护敏感信息的安全,可以使用各种加密算法(如MD5、SHA、AES等)对字符串进行加密和解密。 5. **正则表达式操作**:通过正则表达式实现字符串的查找、替换、分割等高级操作,常用于数据...
总结,这个基于单片机的LCD显示字符串课程设计,不仅锻炼了学生的实践动手能力,也提高了他们对单片机系统设计和程序开发的理解。通过这样的实践,学生能够更好地掌握单片机控制外围设备的方法,为未来在嵌入式系统...
在使用"HiJson 2.1.2_jdk64.exe"这样的软件时,用户通常需要先下载并安装程序,然后将待格式化的JSON字符串复制到软件界面,点击相应的按钮进行格式化。如果软件需要JDK 64位版本,确保系统已安装兼容的Java环境是...
这个“字符串转换工具”很可能是为了帮助开发者和用户更加便捷地进行各种字符串操作。 在编程中,常见的字符串转换包括: 1. **字符编码转换**:如ASCII到Unicode(UTF-8)的转换,或者不同语言编码间的转换,如...
通过创建一个专门的类来处理这些敏感字符串,我们可以规范化处理流程,提高代码的可维护性和安全性。 在"php实现的替换敏感字符串类"中,我们可以预期以下核心功能: 1. **非法字符串检测**:这个功能会检查输入的...
在JavaScript中,`normalize`一词可能来源于字符串对象的`normalize`方法,该方法用于根据Unicode标准规范化字符串。然而,在自定义`normalize`函数时,我们可以扩展这一概念,使其适应任何数据转换需求。 实现`...
在本次C语言课程设计中,学生被要求设计两个主要功能:1) 字符串比较的函数,以及2) 销售员业绩管理程序。以下是这两个部分的详细说明。 一、字符串比较的函数 1. **最大字符元素查找**:设计一个函数,接收两个...
2. **构造函数**:初始化字符串,可以接受空字符串、字符数组或已有的字符串作为参数。 3. **赋值操作**:包括赋值运算符(=)重载,用于将一个字符串复制到另一个字符串。 4. **连接操作**:提供连接两个字符串的...