`

对字符串进行验证之前先进行规范化

    博客分类:
  • java
 
阅读更多
对字符串进行验证之前先进行规范化

应用系统中经常对字符串会进行各种规则的验证,不过由于字符串信息在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 &mdash; 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);
		}
	}

0
1
分享到:
评论

相关推荐

    C语言检测字符串是否为json字符串

    在进行数据交互时,我们常常需要检查一个字符串是否符合JSON的格式规范,这就是`C语言检测字符串是否为json字符串`这个主题所关注的问题。 C语言本身并不直接支持JSON解析,因此我们需要借助第三方库或者自定义函数...

    json转化工具,字符串格式化工具,方便又快捷

    - **验证JSON**:检查输入的字符串是否符合JSON规范,确保数据的正确性。 - **美化输出**:提供颜色高亮,使键、值、引号等关键元素更加突出,提高阅读体验。 - **复制/粘贴功能**:方便用户快速复制格式化后的...

    13InstallShield内部库函数全集十三-字符串函数(中文版).rar

    在软件开发过程中,字符串处理是必不可少的部分,特别是在安装脚本中,需要对用户输入、路径、文件名等进行各种字符串操作。 这份文档详细介绍了InstallShield内部库中的字符串函数,这些函数涵盖了字符串的创建、...

    关于json字符串与实体之间的严格验证代码.docx

    通过对JSON字符串与实体类之间进行严格验证,可以有效地提高数据的一致性和准确性,减少因数据格式错误而导致的运行时错误。本文介绍了如何使用 `Newtonsoft.Json.Schema` 库实现这一目标,包括生成JSON Schema、...

    C语言实现的 json格式字符串与结构体自动相互转化

    描述中提到的"在cjson基础上,实现了字符串与结构体自动相互转化的功能",意味着这个项目是基于现有的开源库cjson进行扩展的。cjson是一个用C语言编写的轻量级JSON解析器和生成器,能够处理JSON格式的数据,将其转换...

    JSON字符串校验

    JSON字符串验证可能遇到的问题有: - 键值对中的键未用双引号括起。 - 值的类型不正确,如使用了函数、日期或其他非JSON支持的类型。 - 缺少逗号或冒号。 - 对象或数组没有正确关闭的括号。 - 未转义的特殊字符,如...

    字符串过滤工具类,不错的类

    "字符串过滤工具类"就是针对这样的需求而设计的,它提供了一种便捷的方式来对字符串中的特定关键字进行过滤,以达到安全、合规或者优化显示的目的。下面将详细解释这个工具类的核心知识点。 首先,字符串过滤工具类...

    字符串大小写转换.rar

    在编程领域,字符串大小写转换是一项常见的操作,尤其在处理用户输入、文本分析或格式化输出时显得尤为重要。本文将详细讲解字符串大小写转换的概念、常见编程语言中的实现方法以及其在实际应用中的价值。 一、字符...

    将json字符串转换为对象

    例如,在实际开发中,开发者可能会使用在线的JSON格式化和解析工具,如JSONLint,来验证JSON字符串的正确性,或者使用浏览器的开发者工具(如Chrome的DevTools)中的Console来快速测试JSON.parse()。 至于...

    oracle登陆字符串格式校验 (user/pwd@dbservname)

    在Oracle数据库管理中,为了确保连接字符串的正确性,经常需要对连接字符串进行格式校验。本文将详细介绍如何通过编程方式来解析并验证一个标准的Oracle登录字符串(`user/pwd@dbservname`)的格式是否正确。 #### ...

    字符验证/** 字符验证/**

    该函数用于验证整个字符串中的所有字符是否均合法。若字符串中存在不合法字符,则返回 `false`;否则返回 `true`。 ### 五、综合应用 通过上述几个函数的配合使用,可以在 Web 应用程序中实现对用户输入的有效验证...

    验证自定义特殊字符.rar

    综上所述,验证自定义特殊字符是软件开发中的一个重要环节,它涵盖了字符串处理、正则表达式、编码规范、安全防护等多个技术领域。在实际应用中,开发者需要根据具体需求,灵活运用各种工具和技术,确保数据的有效性...

    编程相关 原创字符串转换小工具

    4. **字符串加密解密**:保护敏感信息的安全,可以使用各种加密算法(如MD5、SHA、AES等)对字符串进行加密和解密。 5. **正则表达式操作**:通过正则表达式实现字符串的查找、替换、分割等高级操作,常用于数据...

    单片机课程设计报告:基于单片机的LCD显示字符串.doc

    总结,这个基于单片机的LCD显示字符串课程设计,不仅锻炼了学生的实践动手能力,也提高了他们对单片机系统设计和程序开发的理解。通过这样的实践,学生能够更好地掌握单片机控制外围设备的方法,为未来在嵌入式系统...

    JSON字符串格式化软件版

    在使用"HiJson 2.1.2_jdk64.exe"这样的软件时,用户通常需要先下载并安装程序,然后将待格式化的JSON字符串复制到软件界面,点击相应的按钮进行格式化。如果软件需要JDK 64位版本,确保系统已安装兼容的Java环境是...

    字符串转换

    这个“字符串转换工具”很可能是为了帮助开发者和用户更加便捷地进行各种字符串操作。 在编程中,常见的字符串转换包括: 1. **字符编码转换**:如ASCII到Unicode(UTF-8)的转换,或者不同语言编码间的转换,如...

    php实现的替换敏感字符串类

    通过创建一个专门的类来处理这些敏感字符串,我们可以规范化处理流程,提高代码的可维护性和安全性。 在"php实现的替换敏感字符串类"中,我们可以预期以下核心功能: 1. **非法字符串检测**:这个功能会检查输入的...

    js代码-实现一个 normalize 函数,能将输入的特定的字符串转化为特定的结构化数据

    在JavaScript中,`normalize`一词可能来源于字符串对象的`normalize`方法,该方法用于根据Unicode标准规范化字符串。然而,在自定义`normalize`函数时,我们可以扩展这一概念,使其适应任何数据转换需求。 实现`...

    设计字符串比较的函数和销售员业绩管理程序

    在本次C语言课程设计中,学生被要求设计两个主要功能:1) 字符串比较的函数,以及2) 销售员业绩管理程序。以下是这两个部分的详细说明。 一、字符串比较的函数 1. **最大字符元素查找**:设计一个函数,接收两个...

    stringwp_字符串类C++实现_

    2. **构造函数**:初始化字符串,可以接受空字符串、字符数组或已有的字符串作为参数。 3. **赋值操作**:包括赋值运算符(=)重载,用于将一个字符串复制到另一个字符串。 4. **连接操作**:提供连接两个字符串的...

Global site tag (gtag.js) - Google Analytics