繁体   English   中英

正则表达式验证字符串包含字母和数字而不考虑特殊字符

[英]Regex validate string contains letters and numbers regardless of special characters

对于 Python 中的密码验证,我需要制作一个正则表达式,用于验证密码是否同时包含字母和数字。 我有这个正则表达式:

re.match(r"^[A-Za-z]+\d+.*$", password)

但如果密码包含特殊字符,则不会通过。 因此,例如“MyPassword6”的密码可以,但“MyPassword-6”则不行。 如果数字在开头“6MyPassword”上,它也不会通过。

如何使用强制性字母和数字验证正则表达式,而不管它们的顺序如何以及是否存在其他特殊字符?

谢谢!!!

添加[~!@#$%^& ()_-] 没有帮助,我找不到其他解决方案:/

此正则表达式使用两个正向先行断言(?=...)来确保密码至少包含一个字母和至少一个数字。 每个先行断言中的.*符号表示密码中可以包含任何字符,包括特殊字符和空格,只要字母和数字也存在即可。

import re

# compile the regular expression
regex = re.compile(r'(?=.*[a-zA-Z])(?=.*[0-9])')

def is_valid_password(password):
    # Check if the password is valid
    return regex.search(password) is not None

password = "@u2_>mypassw#ord123!*-"

if is_valid_password(password):
    print("Valid password")
else:
    print("Invalid password")

以下正则表达式模式应该有效

r"^.*[A-Za-z]+.*\d+.*$|^.*\d+.*[A-Za-z]+.*$"

解释:

  • ^.*[A-Za-z]+.*\d+.*$ :查找字母在数字之前的密码
  • ^.*\d+.*[A-Za-z]+.*$ :查找字母前有数字的密码
  • | :使用 OR 找到一个序列 OR 另一个
  • .* :用于在此位置查找 0 个或多个任意类型的字符
  • [A-Za-z]+ :用于在此位置查找 1 个或多个字母
  • \d+ :用于在此位置查找 1 个或多个数字
  • ^$ :分别是行的开始结束

Regex101 演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM