Похоже, ваша проблема может быть спамом, поэтому есть лучшие решения, которые вы можете использовать. Если это так, см. Конец этого ответа для деталей.
Я прокомментировал, что зависит от того, какие языки вы хотите заблокировать. В десятке или более языках используется латинская кодировка, а еще больше - подмножество латинских кодировок. Английский использует также акценты, такие как слово наивное. Поэтому я не рекомендую вам попробовать и сделать это.
Если необходимо, и вы хотите заблокировать не-латинские символы, вы можете написать собственный валидатор.
class LatinCharsetValidator < ActiveModel::EachValidator
# Regex taken from this answer http://stackoverflow.com/a/13671443/276959
LATIN_CHARSET_REGEX = /[\p{L}&&[^a-zA-Z]]/
def validate_each(object, attribute, value)
object.errors.add(attribute) if value =~ LATIN_CHARSET_REGEX
end
end
Вы можете назвать этот валидатор в вашей модели, как, например:
class Comment < ActiveRecord::Base
validates :comment, latin_charset: true
end
Это предполагает, что пользователи законно пытаются комментировать. Если нет, вы можете использовать регулярное выражение, чтобы пропустить создание комментариев без предоставления обратной связи.
Я считаю, что это плохая идея. Вы не можете контролировать, что люди в конечном итоге пишут или вставляют в текстовую область, и вы можете закончить блокировку законных комментариев. Что, если кто-то хочет включить чужое слово, пытаясь объяснить это? Лучше вежливо попросить своих пользователей только прокомментировать на английском языке.
Если ваша проблема в спаме, однако, вам лучше реализовать honeypot или какой-либо другой тип защиты от спама.
Это зависит от того, на каком языке вы хотите предотвратить. Если они являются языковыми языками, тогда забудьте об этом. Около десятка или более языков используют один и тот же буквенный набор и даже больше используют одно и то же подмножество букв. Не говоря уже о том, что у англичан есть акценты, такие как наивные. – Mohamad
Ну, я бы не прочь ограничивать такие слова, как наивные. Но я пытаюсь уменьшить представления на арабском языке, различные кириллические алфавиты и т. Д. – you786
См. Мой ответ. – Mohamad