在以下语句中,其中一个空格来自用户的输入(我从远程Rails控制台复制用户的角色(ActiveRecord字段)并粘贴它),另一个来自我的键盘.声明返回false:
" " == "?" # => false
" ".include? "?" # => false
Run Code Online (Sandbox Code Playgroud)
关于为什么/如何发生这种情况的任何想法?
要验证用户输入的空白,不应使用==和/或include?帮助程序.人们应该使用现代的正则表达式来匹配空间.
仅供参考:UTF-8规格中有十个以上的空白字符,包括但不限于:
spaces = {
space_medium_mathematical_space: "?",
spaces_em_quad: "?",
spaces_em_space: "?",
spaces_en_quad: "?",
spaces_en_space: "?",
spaces_figure_space: "?",
spaces_four_per_em_space: "?",
spaces_hair_space: "?",
spaces_punctuation_space: "?",
spaces_six_per_em_space: "?",
spaces_thin_space: "?",
spaces_three_per_em_space: "?"
}
Run Code Online (Sandbox Code Playgroud)
为了匹配它们,人们使用\p{Space}匹配器.
spaces.values.map { |s| s == ' ' }
#? [false, false, false, false, false, false,
# false, false, false, false, false, false]
Run Code Online (Sandbox Code Playgroud)
但:
spaces.values.map(&/\A\p{Space}*\z/.method(:match?))
#? [true, true, true, true, true, true,
# true, true, true, true, true, true]
Run Code Online (Sandbox Code Playgroud)