【问题标题】: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")