我正在用两种语言创建一个网站 ( Speedy Net ) - 英语和希伯来语。我有一个输入字段(slug/用户名),它必须是英文(字母数字拉丁字符)。当我从手机进入网站时,我可以用希伯来语写文字。是否可以在此输入字段中强制键盘为英文?我注意到对于电子邮件地址(电子邮件输入),键盘已经是英文的。
更新:在服务器端,我们会验证输入。我不想在客户端验证输入(使用 JavaScript)或阻止用户输入希伯来字符(这可能稍后完成),但我想导致(强制)默认键盘语言为英语.我注意到对于电子邮件和密码,当我将它们的方向设置为 ltr
时,键盘的默认语言是英语。但不是在 slug/username 字段上。
电子邮件输入被我测试的浏览器自动验证为英文。你不能在那里使用希伯来语字符。
我在 Stack Overflow 或其他地方进行了搜索,但没有找到类似的问题。
slug 字段可以包含任何非字母数字字符,这些字符由服务器转换为破折号。例如Aa=Bb!1@2#3$4%56
被服务器转换为aa-bb-1-2-3-4-56
,即Speedy Net 上用户的有效 slug。但是,אא-בב-1-2-3-4-56
在 Speedy Net 上不是有效的 slug。用户的 slug 必须以至少 4 个拉丁字母开头。
当页面使用希伯来语时就会出现问题。如果页面是英文的,就没有问题。
在我的网站上,当输入名字和姓氏时,用户可以输入任何语言。键入电子邮件地址(电子邮件输入)时,键盘会自动切换为英语(已在 Galaxy 上测试)。但是当输入别名/用户名(在电子邮件地址之后)时,如果在输入电子邮件之前(在 Galaxy 上)键盘是希伯来语,则键盘会切换回希伯来语。这就是我要防止的。
最佳答案
在我看来,您有 2 个选择。
第一个是让用户输入他们想要的任何内容,但在后端使用一个只接受带有拉丁字符的用户名的验证器。
class UsernameValidator(validators.RegexValidator):
regex = r'^[\w.@+-]+\Z'
message = _(
'Enter a valid username. This value may contain only letters, '
'numbers, and @/./+/-/_ characters.'
)
flags = 0
class YourUser(User):
username = models.CharField(
_('username'),
max_length=150,
unique=True,
help_text=_('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'),
validators=[UsernameValidator()],
error_messages={
'unique': _("A user with that username already exists."),
},
)
第二种是使用某种 JavaScript 掩码库,例如 https://imask.js.org/所以你可以防止用户插入任何你不希望他们插入的数据,但是无论如何,如果你遵循这种方法,你应该在后端验证数据
关于html - 是否可以强制网站输入为英文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57269532/