【问题标题】:How to check if a string contains only letters or only numbers?如何检查字符串是否仅包含字母或仅包含数字?
【发布时间】:2020-01-14 18:40:06
【问题描述】:

我正在创建一个包含密码强度测试的登录系统。密码必须包含字母和数字、大小写字母,长度在 6 到 12 个字符之间。有人告诉我有语法错误,但不是在哪里。我刚刚将密码强度测试添加到一个更大的程序中,我知道程序的其余部分运行良好,因此这部分是问题所在。

def Password():
global UName
global FName
global SName
global Email
print('A secure password should be between 6 and 12 letters in')
print('length, have upper and lowercase letters and have numbers.')
PWord = input('Please enter a secure password:')
if PWord.isalpha() or if PWord.isdigit():
    if len(PWord) < 6 or if len(Pword) > 12:
        if PWord.isupper() or if PWord.islower():
            print('You need upper and lowercase letters. Try again')
            Password()
        else:
            print('Password is strong')
            g = open('Database1.txt', 'a')
            g.write('\n' + UName +',')#Writes user details to database file
            g.write(FName +',')
            g.write(SName +',')
            g.write(Email +',')
            g.write(PWord +',')
            g.close()#Closes file

            h = open('Database2.txt', 'a')
            Daily = input('Enter your daily energy use target:')
            Monthly = input('Enter your monthly energy use target:')
            Yearly = input('Enter your yearly energy use target:')

            h.write('\n' + UName +',')#Writes user details to the second database file
            h.write(Daily +',')
            h.write(Monthly +',')
            h.write(Yearly +',')
            h.write('0' +',')#Other values
            h.write('0' +',')#Other values
            h.write('0' +',')#Other values
            h.write('0' +',')#Other values
            h.close()#Closes file

            main()#takes user back to menu so they can login
    else:
        print('Password is not the correct length, try again')
        Password()
else:
    print('You need letters and numbers, try again')
    Password()

UName、FName、SName 和 Email 都取自之前的函数,因此它们被声明为全局变量。

通过注释掉各个部分,我确定该行

if PWord.isalpha() or if PWord.isdigit():

抛出语法错误,但我不知道为什么。我以前创建过这样的系统,但无法确定问题所在。如果有人可以帮助我,我将不胜感激。

【问题讨论】:

  • 你遇到了什么语法错误?
  • 请简化你的生活,使用re.search(r'^[A-Za-z0-9]{6,12}$', password)

标签: python-3.x


【解决方案1】:

这就是出现语法错误的原因 您可以使用andor运算符在if条件中放置多个条件,无需多次使用if

您也可以在此处使用正则表达式验证密码 -

import re
password = raw_input("Enter string to test: ")
if re.match(r'[A-Za-z0-9@#$%^&+=]{6,12}', password):
    # match
else:
    # no match

这里是正则表达式的解释

[A-Za-z0-9@#$%^&+=]{6,12} " gm 匹配出现在 下面列出 [A-Za-z0-9@#$%^&+=]{8,} {8,} 量词 - 匹配 8 无限次,尽可能多次,按需回馈 (贪婪)A-Z 范围内的单个字符 A(索引 65)和 Z(索引 90)(区分大小写) a-z 范围内的单个字符 在 a(索引 97)和 z(索引 122)之间(区分大小写)0-9 单个 介于 0(索引 48)和 9(索引 57)之间的字符(大小写 敏感)@#$%^&+= 匹配列表中的单个字符 @#$%^&+= (区分大小写)全局模式标志 g 修饰符:全局。所有比赛 (第一次匹配后不返回) m 修饰符:多行。原因 ^ 和 $ 匹配每行的开始/结束(不仅是字符串的开始/结束)

【讨论】:

    【解决方案2】:

    试试

    if PWord.isalpha() or PWord.isdigit():
    

    但您最好使用正则表达式,如其他答案中所述

    祝你好运

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-16
      • 2014-04-02
      • 2010-12-19
      • 2016-04-19
      • 2014-06-21
      • 1970-01-01
      • 2014-11-01
      相关资源
      最近更新 更多