【问题标题】:How do I check isalpha() for only the first 5 characters of a string?如何仅检查字符串的前 5 个字符的 isalpha()?
【发布时间】:2021-07-03 09:17:17
【问题描述】:

我想验证一张 PAN 卡,它的前 5 个字符是字母,接下来的 4 个是数字,最后一个字符是字母。我不能使用 isalnum() 因为我也想检查这个特定的顺序,而不仅仅是验证它是否同时包含数字和字母。

这是我的代码片段:

def validate_PAN(pan):
    for i in pan:
        pan.isalpha(pan[0:4])==True:
            return 1
        pan.isdigit(pan[5:9])==True:
            return 1
        pan.isalpha(pan[9])==True:
            return 1
        else:
            return 0

这显然会返回错误,因为它是错误的。我该如何解决这个问题?

【问题讨论】:

    标签: python function user-interface isalpha


    【解决方案1】:

    只做字符串切片和检查

    s[:5].isalpha()
    

    pan[0:4] - 在这里检查前 4 个字符,而不是 5 个字符。

    s[m:n] - 这会将字符串从mth 字符分割到nth 字符(不包括n

    你的代码有错误

    pan.isalpha(pan[0:4])==True

    这是给你的错误,因为isalpha() 不接受任何参数并且你没有在它之前使用if

    您必须使用 - if pan[:5].isalpha() == True:

    【讨论】:

      【解决方案2】:

      为简单起见,您可以使用regular expression

      import re
      
      PAN_1 = 'ABCDE1111E'
      PAN_2 = 'ABC1111DEF'
      
      def is_valid_PAN(PAN_number):
          return bool(re.match(r'[a-z]{5}\d{4}[a-z]', PAN_number, re.IGNORECASE))
      
      print(is_valid_PAN(PAN_1)) #True
      print(is_valid_PAN(PAN_2)) #False
      

      【讨论】:

        【解决方案3】:

        正则表达式非常适合。

        import re
        
        # Pattern for matching a PAN number
        pattern = r'\b[A-Z]{5}[0-9]{4}[A-Z]\b'
        
        # compile the pattern for better performance with repetitive matches
        pobject = re.compile(pattern)
        
        pan_number = "AXXMP1234Z"
        result = pobject.match(pan_number)
        
        if result:
            print ("Matched for PAN: ", res.group(0))
        else:
            print("Failed")
        

        【讨论】:

          猜你喜欢
          • 2019-10-14
          • 1970-01-01
          • 2019-03-19
          • 2017-02-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多