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

Uri*_*Uri 10 html css django hebrew

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

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

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

我进行了搜索,但没有在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上)希伯来语位于希伯来语,键盘将切换回希伯来语。这就是我要防止的。

Dal*_*tor 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."),
            },
        )
Run Code Online (Sandbox Code Playgroud)

第二种方法是使用某种JavaScript掩码库,例如https://imask.js.org/,这样可以防止用户插入您不希望他们插入的任何数据,但是无论如何,您都应该验证数据在后端,如果您遵循这种方法


bru*_*ers 9

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

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

在前端,您可以使用这种简单的老式解决方案,也可以使用input的pattern属性

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