对字符串进行验证之前先进行规范化
应用系统中经常对字符串会进行各种规则的验证,不过由于字符串信息在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);
}
}
分享到:
相关推荐
Linter关于Swagger JSON API 规范的 Linter安装npm install --save swagger-lint-api用法该库公开了要与OpenAPI / Swagger JSON格式的架构一起使用的验证器: 需要图书馆基于模式实例化一个新的验证器调用验证器方法...
行列路径 使用unicorn.js:8:14这样的行和列来解析和字符串化文件路径 安装 $ npm install line-column-path 用法 const lineColumnPath = require ( 'line-column-... 也可以是您要验证和规范化的对象。 .stringif
规则 1.5 从格式化字符串中排除用户输入 规则 1.6 禁止向Runtime.exec() 方法传递不可信、未净化的数据 规则 1.7 验证路径之前应该先将其标准化 规则 1.8 安全地从ZipInputStream提取文件 规则 2.1 不要抑制或者忽略...
子域黑名单 您的用户在设置帐户时不应使用的常用词列表。 ... 除了黑名单之外,此... 在验证字符串之前,必须对其进行规范化。 字符串的规范化必须: 删除任何后缀数字, 将大小写更改为小写, 如果字符串以s结尾,
WP REST API架构验证器...使用您的REST路由namespace和本地化字符串数组初始化一个Middleware实例。 应该在触发rest_api_init挂钩之前初始化此中间件。 例如, plugins_loaded 。 此外,必须在顶层使用title属性创建模
它可以从普通的Ruby Hash或YAML字符串创建配置。 这些配置对象的行为通常类似于普通基元(哈希,数组等)。 require 'travis/yaml'config = Travis :: Yaml . parse ( 'language: ruby' )config = Travis :: Yaml ....
"^The": 匹配以 "The"开头的字符串; "of despair$": 匹配以 "of despair" 结尾的字符串; "^abc$": 匹配以abc开头和以abc结尾的字符串,实际上是只有abc与之匹配 "notice": 匹配包含notice的字符串 你可以看见...
表示大多数变体类型(SNV,插入缺失,双亲,反演等)和概念(智能偏移,不确定位置,区间) 变体归一化器,以规范形式重写变体并替换参考序列(如果参考序列和成绩单序列不同) 从内部表示生成HGVS字符串的格式化...
8.编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串。 9.Java中访问数据库的步骤,Statement和PreparedStatement之间的区别。 10.找出下列代码可能存在的错误,并说明原因: 二、JSP&Servlet...
规范化并验证Node.js版本。 采取任何版本范围作为输入,例如8 , 8.5.0或>=8 ,并返回一个"major.minor.patch"字符串。 如果Node.js版本不存在,则抛出该异常。 例 const normalizeNodeVersion = require ( '...
Kami:高级参数硬件规范及其模块化验证的平台目录内容./:包含有关Kami的语法,语义,定理/属性和自动证明的源代码。 Lib:包含我们为Kami开发的通用库文件,扩展了标准Coq库,例如位向量,以字符串为键的可确定有限...
验证,规范化和提取任何电话号码字符串的元素。 :hundred_points: 简单的Swift语法和轻量级的可读代码库。 :chequered_flag: 快速。 1000个解析->〜0.4秒。 :books: Google的libPhoneNumber项目中的同类最佳...
PRECIS配置文件将Unicode字符串转换为规范形式,适合进行比较。 该模块实现了PRECIS框架,如以下所述: PRECIS框架:应用协议中国际化字符串的准备,执行和比较( ) 表示用户名和密码的国际化字符串的准备,执行和...
将规范的片段放置在文档字符串中时。 混合策略。 当路由位于规范文件中时,操作在文档字符串中描述。 例子 async def handler ( request , pet_id ): """ --- tags: [Pet] description: Info about pet ...
图书馆管理系统 图书馆管理是一个应用程序,其中所有与图书、分馆、已借书、已借书等相关的信息都以规范化的形式存储。 图书馆管理系统 开发者:... 如果部分输入书名,它将返回标题中包含该搜索子字符串的所有书。
6.1.1 如何使用String对象方法操作字符串 6.1.2 获取目标字符串长度 6.1.3 连接两个字符串 6.1.4 验证电子邮件地址的合法性 6.1.5 返回指定位置的字符串 6.1.6 在URL中定位字符串 6.1.7 分隔字符串 6.1.8 将字符串...
6.1.1 如何使用String对象方法操作字符串 6.1.2 获取目标字符串长度 6.1.3 连接两个字符串 6.1.4 验证电子邮件地址的合法性 6.1.5 返回指定位置的字符串 6.1.6 在URL中定位字符串 6.1.7 分隔字符串 6.1.8 将字符串...
声明式数据验证。 。 什么是通行证? Passable是JS应用程序库,用于以结构化和声明性的方式编写验证。... 每个测试在回调之前都有两个字符串值,一个用于字段名称,一个用于返回给用户的错误。 您
处理带有任意字符集的编码和规范化字符串的字符串 实用功能,如indexOf 、 count 、 isEmpty 、 bitAt , contains ... 灵活性提供您自己的转换器、验证器和编码器 代码是用目标编译的,以保持与Android和旧Java应用...
它为C++版本提供了Perl封装,允许访问Perl的XML分析器,它还提供对统一编码字符串的访问。 Xerces Java Parser 1.2.0支持XML 1.0,可用于建立兼容XML的网页服务器,建立下一代基于XML的垂直应用,制作XML编辑器,...