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/,这样可以防止用户插入您不希望他们插入的任何数据,但是无论如何,您都应该验证数据在后端,如果您遵循这种方法
您不能强制使用语言本身(文本输入只知道字符,对语言一无所知,实际上用户名是相当任意的字符序列,不一定是现有语言中的现有单词),但是您可以限制允许的字符到ascii(这实际上是您的真正需求)。
在后端(django),您可以将现有代码用于子弹(参见models.SlugField和validators.validate_slug),也可以编写自己的验证器以满足更具体的需求。
在前端,您可以使用这种简单的老式解决方案,也可以使用input的pattern属性。
注意:由于django特定的后端部分,我没有投票同意以重复的方式结束您的问题,但是您确实应该在发布问题之前进行搜索,因为这里和其他地方已经有很多类似的问题...