我一直在使用它:
if value.chars.count < value.bytes.count
puts "Some non english characters found."
end
但这错误地将以下内容标记为非英语。
React and You: A Designer’s Point of View
如何轻松检查字符串是否没有亚洲/法国/俄罗斯字符?
我可以遍历字符串中的每个字符,如果.bytes == 1
将它添加到temp var中。然后,如果那个临时变量不是零,则表示它是英文字符。但这似乎相当复杂。
答案 0 :(得分:1)
正如评论中指出的那样(here和here),此解决方案将拒绝一些英文单词,其中可能被视为“非英语“人物。
使用“How to read only English characters”中提供的答案,您可以调整它以删除任何标点字符或空格,并使用相同的正则表达式进行比较,如下所示:
str = "React and You: A Designer’s Point of View"
str.gsub(/[[:punct:]]|\s/, "") =~ /^[a-zA-Z]+$/
#=> 0
.gsub(/[[:punct:]]|\s/, "")
会删除所有标点字符或空格,因此您可以将其与/^[a-zA-Z]+$/
正则表达式进行比较。
以下是一步一步的例子:
str = "React and You: A Designer’s Point of View"
str.gsub!(/[[:punct:]]|\s/, "") #=> "ReactandYouADesignersPointofView"
str =~ /^[a-zA-Z]+$/ #=> 0
str = "Comment ça va?"
str.gsub!(/[[:punct:]]|\s/, "") #=> "Commentçava"
str =~ /^[a-zA-Z]+$/ #=> nil
如果您也期待数字,请将正则表达式更改为:/^[a-zA-Z0-9]+$/
。
正如this comment中所指出的,请注意,使用[[:punct:]]
将允许非英语标点字符,例如¿
或¡
;所以,如果这些字符也是预期的(并且必须导致拒绝该句子为有效),那么最好避免gsub
并与具有所有允许字符的自定义正则表达式进行比较,例如 1 < / SUP>:
str =~ /^[a-zA-Z0-9\[\]{}\\*:;@$%&#?!|’'"-\.\/_\s]+$/
1 这只是我能想到的最常见字符的一个例子,但需要使用被视为有效的任何字符进行自定义。