将名称保存为唯一名称而不更改其当前大小写
save name as an unique without change its current case
我们在验证唯一列创建时遇到问题
问题是我们已经有了一个字段名"Stack Overflow"
现在我可以检查是否有人输入 "Stack Overflow" 或 "STACK OVERFLOW" 或 "stack overflow" 我们不允许用户创建该字段。
但是当有人在 "Stack Overflow" 之间放置更多 space 时,它会保存 space 并与 space 一起保存,因此它不会检查字段的唯一性。
我们正在使用此代码进行唯一列检查
self.unique_columns = self.unique_columns + additional_unique_columns.each_line.collect(&:strip).map(&:downcase).uniq.select{|column| !self.unique_columns.map(&:downcase).include?(column.downcase)}
谁能建议我们如何检查这种情况?
您可以使用正则表达式将两个单词之间任意数量的白色 space 替换为一个 space 以保持一致。此外,您可以使用 String#strip 方法去除所有前导和尾随的白色 spaces:
> 'Stack Overflow'.gsub(/\s+/, ' ').strip
# => "Stack Overflow"
> 'Stack Overflow'.gsub(/\s+/, ' ').strip
# => "Stack Overflow"
> 'Stack Overflow'.gsub(/\s+/, ' ').strip
# => "Stack Overflow"
> ' Stack Overflow '.gsub(/\s+/, ' ').strip
# => "Stack Overflow"
所以,以上所有returns相同的Stack Overflow
字符串,可以认为是唯一的。
更新
正如@Arv 已经提到的,squish 是解决这个问题的方法,因为它将删除字符串两端的所有白色space,然后更改剩余的连续白色space组,每组space。
我已经看到了答案,但如果我们的名称前后都带有 space,则无法解决问题。
我用 squish
完成了
columns = self.unique_columns.map{|i| i.downcase.squish}
self.unique_columns = self.unique_columns + additional_unique_columns.each_line.collect(&:strip).select{|column| !columns.include?(column.downcase.squish)}
分享其他答案
我们在验证唯一列创建时遇到问题
问题是我们已经有了一个字段名"Stack Overflow"
现在我可以检查是否有人输入 "Stack Overflow" 或 "STACK OVERFLOW" 或 "stack overflow" 我们不允许用户创建该字段。
但是当有人在 "Stack Overflow" 之间放置更多 space 时,它会保存 space 并与 space 一起保存,因此它不会检查字段的唯一性。
我们正在使用此代码进行唯一列检查
self.unique_columns = self.unique_columns + additional_unique_columns.each_line.collect(&:strip).map(&:downcase).uniq.select{|column| !self.unique_columns.map(&:downcase).include?(column.downcase)}
谁能建议我们如何检查这种情况?
您可以使用正则表达式将两个单词之间任意数量的白色 space 替换为一个 space 以保持一致。此外,您可以使用 String#strip 方法去除所有前导和尾随的白色 spaces:
> 'Stack Overflow'.gsub(/\s+/, ' ').strip
# => "Stack Overflow"
> 'Stack Overflow'.gsub(/\s+/, ' ').strip
# => "Stack Overflow"
> 'Stack Overflow'.gsub(/\s+/, ' ').strip
# => "Stack Overflow"
> ' Stack Overflow '.gsub(/\s+/, ' ').strip
# => "Stack Overflow"
所以,以上所有returns相同的Stack Overflow
字符串,可以认为是唯一的。
更新
正如@Arv 已经提到的,squish 是解决这个问题的方法,因为它将删除字符串两端的所有白色space,然后更改剩余的连续白色space组,每组space。
我已经看到了答案,但如果我们的名称前后都带有 space,则无法解决问题。
我用 squish
columns = self.unique_columns.map{|i| i.downcase.squish}
self.unique_columns = self.unique_columns + additional_unique_columns.each_line.collect(&:strip).select{|column| !columns.include?(column.downcase.squish)}
分享其他答案