是否可以强制网站输入为英文?

时间:2019-07-30 10:24:36

标签: html css django hebrew

我正在用两种语言(英语和希伯来语)创建一个网站(Speedy Net)。我有一个输入字段(“ slug / username”),该字段必须为英语(字母数字拉丁字符)。当我通过手机进入网站时,我可以用希伯来语写文字。是否可以在此输入字段中强制使用英文键盘?我注意到,对于电子邮件地址(电子邮件输入),键盘已经是英文了。

更新:在服务器端,我们确实验证了输入。我不想在客户端(使用JavaScript)上验证输入,也不想阻止用户键入希伯来字符(稍后可能会这样做),但是我想使(强制)默认键盘语言为英语。我注意到,对于电子邮件和密码,当将其方向设置为ltr时,键盘的默认语言是英语。但是在“子弹/用户名”字段上没有。

我测试的浏览器会自动验证电子邮件输入为英文。您不能在那里使用希伯来语字符。

我进行了搜索,但没有在Stack Overflow或其他地方找到类似的问题。

从属字段可以包含服务器将其转换为破折号的任何非字母数字字符。例如,服务器将Aa=Bb!1@2#3$4%56转换为aa-bb-1-2-3-4-56,这是Speedy Net上用户的有效子弹。但是,אא-בב-1-2-3-4-56在Speedy Net上不是有效的标记。用户不得以至少4个拉丁字母开头。

页面在希伯来语时会出现问题。如果页面是英语,则没有问题。

在我的网站中,输入名字和姓氏时,用户可以输入任何语言。输入电子邮件地址(电子邮件输入)时,键盘会自动切换为英语(在Galaxy上经过测试)。但是,在输入信息/用户名(在电子邮件地址之后)时,如果在输入电子邮件之前(在Galaxy上)希伯来语位于希伯来语,键盘将切换回希伯来语。这就是我要防止的事情。

4 个答案:

答案 0 :(得分:13)

我认为您有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/,这样可以防止用户插入您不希望他们插入的任何数据,但是无论如何,您都应该在后端,如果您采用这种方法

答案 1 :(得分:9)

您不能强制使用语言本身(文本输入只知道字符,对语言一无所知,实际上用户名是相当任意的字符序列,不一定是现有语言中的现有单词),但是您可以限制允许使用的字符为ascii(这实际上是您的实际需求)。

在后端(django),您可以将现有代码用于子弹(参见models.SlugField和validators.validate_slug),也可以编写自己的验证器来满足更具体的需求。

在前端,您可以使用plain old-school solution like this oneuse the pattern attribute of the input

NB:请注意,由于特定于Django的后端,我没有投票同意以重复的方式结束您的问题,但是您确实应该在发布问题之前进行搜索,因为这里和其他地方已经有很多类似的问题...

答案 2 :(得分:0)

暴力破解和错误答案...排序,这会产生副作用(例如限制您可以在页面上使用的字符范围-无需表情符号☹),但是您可以使用charset元标记并将其设置为US-ASCII之类的内容。

<meta charset="US-ASCII">

您也许可以将输入字段/表单放入具有有限字符集的iframe中。

再次,是一个答案。

答案 3 :(得分:0)

在验证方面,[1, 2, 3] [4, 5, 6] [7, 8, 9] 元素中的"pattern" attributewidely supported,并提供纯CSS验证。

就显示正确的屏幕键盘而言,我认为[目前]最好将type =“ email”与以上结合使用*-在all supported types中,这是唯一的选择自动切换到拉丁语,同时允许按字母顺序输入-虽然浏览器最好在模式允许的范围内提示并且不显示区域键盘,但是specification在这方面确实需要任何特殊的努力。

[9, 7, 8, 9, 7]  
[3, 1, 2, 3, 1]  
[6, 4, 5, 6, 4]  
[9, 7, 8, 9, 7]  
[3, 1, 2, 3, 1]
<input>

*,也就是说,缺少一些根本性的解决方案,例如从DOM和JS构造自定义OSK并通过立即给予非输入元素焦点来挂起系统OSK。