【问题标题】:Regular expression error while checking for a password [closed]检查密码时出现正则表达式错误[关闭]
【发布时间】:2015-06-30 19:26:34
【问题描述】:

在 javascript 中,我试图检查密码是否必须至少有 8 个字符长,并且必须至少包含一个字母、一个数字并且除了 _@.- 之外没有特殊符号。 为此,我正在使用这个正则表达式

^(?=(.*\d){1})(?=.*[a-zA-Z])(?=.*[!@#$%])[0-9a-zA-Z_@.-]{8,}

但是当我试图用它匹配一个字符串时

^(?=(.*\d){1})(?=.*[a-zA-Z])(?=.*[!@#$%])[0-9a-zA-Z_@.-]{8,}.test('password')

它给出了语法错误

SyntaxError: expected expression, got '^'

我也必须在 python 中检查同样的事情。

【问题讨论】:

  • 你忘了/告诉JS它一个正则表达式
  • 为什么不使用基本的字符串方法?我敢肯定 JS 有一套合理的。

标签: javascript python regex


【解决方案1】:

JS 正则表达式字面量需要包裹在/../:

/^(?=(.*\d){1})(?=.*[a-zA-Z])(?=.*[!@#$%])[0-9a-zA-Z_@.-]{8,}/.test('password')

【讨论】:

  • 附注在 Python 中,您将使用 re.search()re.match()docs.python.org/2/library/re.html
  • 复制答案后也出现同样的错误
  • console.log(/^(?=(.*\d){1})(?=.*[a-zA-Z])(?=.*[!@#$ %])[0-9a-zA-Z_@.-]{8,}/.test('password'))
  • 在您的版本中,您有两个额外的、不可见的字符 - Unicode #8204 和 #8203 - 就在 'password' 之前。这些是“零宽度空间”和“零宽度非连接器”,这就是您看不到它们的原因。显然,它们在这里不合法。
【解决方案2】:

如果您想在没有正则表达式的情况下在 Python 中检查这些条件:

def check_password(password):
    return len(password) > 7 and any(character.isalpha() for character in password) and any(character.isdigit() for character in password) and all(character.isalnum() or character in '_@.-' for character in password)

或者:

def check_password(password):
    if len(password) < 8: return False
    alpha = digit = False
    nosymbol = True
    for character in password:
        if character.isalpha():
            alpha = True
        if character.isdigit():
            digit = True
        if not (character.isalnum() or character in '_@.-'):
            nosymbol = False
    return alpha and digit and nosymbol

【讨论】:

    猜你喜欢
    • 2015-12-27
    • 2011-12-30
    • 1970-01-01
    • 2014-07-01
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多