我想在我的表单上有一个字段,它可以包含一些符号,如#、$ 等。但对于另一种情况,我只想有字母,没有任何符号。我如何剪切所有非字母符号并留下所有俄语西鲁尔字母
这是一个小例子:
我有字符串"йцукен#$%йцукен"
到底想得到"йцукен йцукен"
尝试这个:
'йцукен#$%йцукен'.gsub(/\P{Cyrillic}++/, ' ')
解释:
\p{Cyrillic} 是西里尔字母的字符类。
\P{Cyrillic} 包含所有非西里尔字母的字符。
如果要保留其他字符,可以这样做:
'123йцукен#$%йцукен456'.gsub(/[^\p{Cyrillic}0-9]++/, ' ')
带有允许字符列表的蛮力
def filter(input, allowed)
input.chars.inject('') do |result, char|
result << char if allowed.include? char
result
end
end
test_string = 'abc$6&йцxyz'
allowed_characters = 'abcxyzйц'
puts filter(test_string, allowed_characters)
=> abcйцxyz
您在问题中的表达式"йцукен#$%йцукен"
不是有效的 Ruby 表达式。内#$
双引号用作插值。如果您的意思是 string 'йцукен#$%йцукен'
,并且如果您想'#%$'
用空格替换字符序列而不是仅仅删除它们,那么以下可以工作。
'йцукен#$%йцукен'.tr('#%$', " ").squeeze(" ")
# => "йцукен йцукен"