【问题标题】:how to translate this block of code to javascript?如何将此代码块翻译成javascript?
【发布时间】:2020-12-01 20:36:54
【问题描述】:

我正在尝试将此代码移植到 javascript 中以支持我的后端验证。但是,我不确定 javascript 是否有任何或 isdigit() 或理解列表来实现这一点

def clean_password1(self):
    password1 = self.cleaned_data.get('password1')
    special_characters = "[~\!@#\$%\^&\*\(\)_\+{}\":;,'\[\]]"

    if not any(char.isdigit() for char in password1):
        raise forms.ValidationError(
            'Password must contain at least %(min_length)d digit.' % {'min_length': 2})

    if not any(char.isalpha() for char in password1):
        raise forms.ValidationError(
            'Password must contain at least %(min_length)d letter.' % {'min_length': 6})

    if not any(char in special_characters for char in password1):
        raise forms.ValidationError(
            'Password must contain at least %(min_length)d special character.' % {'min_length': 1})

    if len(password1) < 8:
        raise forms.ValidationError(
            'Password must contain at least %(min_length)d characters.' % {'min_length': 8})

javascript

if (password.length < 8){
  addErrorTo('password', data['message']['password1']);
}

【问题讨论】:

  • JavaScript 中没有列表推导,但逻辑很简单,可以使用标准功能实现它。 isNaN 可以检查字符是否为 in 有效数字(true 表示无效,false 表示有效)。您可能需要一个简单的字母正则表达式。一般来说,你可以用 3 个正则表达式和一个长度检查来实现它。或者更通用的是,为每次检查运行一个正则表达式(总共 4 个)。即使这样,如果您在 UI 中执行此操作,也有许多支持标准的验证库可用。甚至有专门用于密码验证的解决方案。
  • typeof char === 'number' 将检查它是否是数字
  • @fedesc 它也永远不会说true,因为字符串中的每个字符都是字符串本身,而不是数字。除非你转换它。

标签: javascript python django


【解决方案1】:
  • Number.isInteger 检查输入是否为数字。但是输入必须是数字所以parseInt(char)http://www.w3schools.com/jsref/jsref_isinteger.asp

  • 对于 isAlpha,您可以使用正则表达式来测试字符串。

  • 对于特殊字符,您可以使用special_characters.includes(targetChar)

【讨论】:

  • str = "1abc"; Number.isInteger(str[0]) //false
  • 是的,你需要使用 parseInt 之前
【解决方案2】:

这是一个检查密码函数,它会抛出错误或返回 true,如果需要,您可以删除所有错误抛出并替换为 return false。 那应该对你有帮助。 (未经测试,甚至没有在 IDE 中制作,只是在这里为您快速制作)

function checkPassword(pw="") {
    const special_characters = "[~\!@#\$%\^&\*\(\)_\+{}\":;,'\[\]]"
    pw=pw.split("")
    if (pw.length < 8)
        throw new Error("Password Length")
    if (!pw.some(c => special_characters.includes(c)))
        throw new Error("No special char")
    if (!pw.some(c => (c.charCodeAt(0) > 47 && c.charCodeAt(0)) < 58))
        throw new Error("No number")
    if (!pw.some(c => ((c.charCodeAt(0) > 64 && c.charCodeAt(0) < 91) || (c.charCodeAt(0) > 96 && c.charCodeAt(0) < 123))))
        throw new Error("No letter")
    return true
}

【讨论】:

    猜你喜欢
    • 2017-07-24
    • 2021-10-19
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    相关资源
    最近更新 更多