模块 Net::IMAP::StringPrep::SASLprep
SASLprep#saslprep
可以用来根据 [RFC4013] 准备字符串。
SASLprep 以三种方式映射字符:映射为空,映射为空格,以及 Unicode 规范化形式 KC。SASLprep 禁止几乎所有标准 StringPrep
表格 (RFC3454, 附录 “C”) 中的代码点,并使用 StringPrep 的标准双向字符要求 (附录 “D”)。SASLprep 还使用 StringPrep 对 “未分配” 代码点 (附录 “A”) 的定义。
常量
- ASCII_NO_CTRLS
用于短路不需要准备的字符串。
- BIDI_FAILURE
双向字符 [StringPrep, §6]
一个用于匹配不满足 StringPrep 双向字符规则的字符串的正则表达式。
等于 StringPrep::Tables::BIDI_FAILURE。在此重新定义以避免加载
StringPrep::Tables
,除非必要。- MAP_TO_NOTHING
RFC4013 §2.1 映射 - 映射为空
可以映射为空的 “通常映射为空” 的字符 (StringPrep[“B.1”])。
等于 StringPrep[“B.1”]。在此重新定义以避免加载
StringPrep::Tables
,除非必要。- MAP_TO_SPACE
RFC4013 §2.1 映射 - 映射为空格
可以映射为空格 (U+0020) 的非 ASCII 空格字符 (StringPrep[“C.1.2”])
等于 StringPrep[“C.1.2”]。在此重新定义以避免加载
StringPrep::Tables
,除非必要。- PROHIBITED
一个用于匹配 RFC4013 §2.3 和 §2.4 禁止的字符串的正则表达式。
这结合了
PROHIBITED_OUTPUT
和BIDI_FAILURE
。- PROHIBITED_OUTPUT
一个用于匹配 RFC4013 §2.3 禁止的代码点的正则表达式。
这结合了所有
TABLES_PROHIBITED
表格。- PROHIBITED_OUTPUT_STORED
一个用于匹配 RFC4013 §2.3 和 §2.5 禁止的代码点的正则表达式。
这结合了
PROHIBITED_OUTPUT
和UNASSIGNED
。- PROHIBITED_STORED
一个用于匹配 RFC4013 §2.3、§2.4 和 §2.5 禁止的字符串的正则表达式。
这结合了
PROHIBITED_OUTPUT_STORED
和BIDI_FAILURE
。- TABLES_PROHIBITED
RFC4013 §2.3 禁止的输出
-
非 ASCII 空格字符 — StringPrep[“C.1.2”]
-
ASCII 控制字符 — StringPrep[“C.2.1”]
-
非 ASCII 控制字符 — StringPrep[“C.2.2”]
-
私有使用字符 — StringPrep[“C.3”]
-
非字符代码点 — StringPrep[“C.4”]
-
代理代码点 — StringPrep[“C.5”]
-
不适合纯文本字符 — StringPrep[“C.6”]
-
不适合规范表示字符 — StringPrep[“C.7”]
-
更改显示属性或已弃用的字符 — StringPrep[“C.8”]
-
标记字符 — StringPrep[“C.9”]
-
- TABLES_PROHIBITED_STORED
将未分配的 (根据 Unicode 3.2) 代码点添加到
TABLES_PROHIBITED
。RFC4013 §2.5 未分配的代码点
此配置文件将 StringPrep[“A.1”] 表格指定为其未分配代码点的列表。
- UNASSIGNED
RFC4013 §2.5 未分配的代码点
此配置文件将 StringPrep[“A.1”] 表格指定为其未分配代码点的列表。
等于 StringPrep[“A.1”]。在此重新定义以避免加载
StringPrep::Tables
,除非必要。
公共实例方法
使用 StringPrep
算法 RFC3454 的 SASLprep 配置文件 RFC4013,准备用于比较的 UTF-8 string
。
默认情况下,禁止的字符串将返回 nil
。当 exception
为 true
时,将引发描述违规的 StringPrepError
。
当 stored
为 true
时,将禁止 “未分配” 的代码点。对于 StringPrep 和 SASLprep 配置文件,“未分配” 是指 Unicode 3.2,而不是更高版本。有关更多信息,请参见 RFC3454 §7。
# File net-imap-0.5.4/lib/net/imap/stringprep/saslprep.rb, line 42 def saslprep(str, stored: false, exception: false) return str if ASCII_NO_CTRLS.match?(str) # incompatible encoding raises str = str.encode("UTF-8") # also dups (and raises for invalid encoding) str.gsub!(MAP_TO_SPACE, " ") str.gsub!(MAP_TO_NOTHING, "") str.unicode_normalize!(:nfkc) # These regexps combine the prohibited and bidirectional checks return str unless str.match?(stored ? PROHIBITED_STORED : PROHIBITED) return nil unless exception # raise helpful errors to indicate *why* it failed: tables = stored ? TABLES_PROHIBITED_STORED : TABLES_PROHIBITED StringPrep.check_prohibited! str, *tables, bidi: true, profile: "SASLprep" raise InvalidStringError.new( "unknown error", string: string, profile: "SASLprep" ) rescue ArgumentError, Encoding::CompatibilityError => ex if /invalid byte sequence|incompatible encoding/.match? ex.message return nil unless exception raise StringPrepError.new(ex.message, string: str, profile: "saslprep") end raise ex end