[英]Validating an alphabetical AND numerical input in Python
我正在尝试为一个项目进行一些编码,在该项目中,我需要验证包含字母和数字字符的输入,像这样
“ harry23”
我想验证输入内容是否同时包含字母和数字字符,最好不要创建大量代码。 我学校也不热衷于下载复杂的库,因此,如果有一种自己编写代码的方法,而又不依赖于大量的mods,我将不胜感激。 谢谢!
我认为您创建了两个像这样的函数:
如果您的字符串至少为一位,则此字符串将返回true
>>> def hasNumbers(inputString):
... return any(char.isdigit() for char in inputString)
如果您至少将一个字符串作为一个字符,则此字符将返回true
>>> def hasChar(inputString):
... return any(char.isalpha() for char in inputString)
您可以通过执行以下操作来检查两者是否同时存在
if(hasNumbers("Charlie123") and hasChar("Charlie123"))
您始终可以尝试使用子字符串检查进行验证。 如果需要,可以更改它们以包括大写/小写和数字。
这是一个简单的示例:
if "substring" not in somestring:
print("Error!")
您可以将其放入while True
循环中,并具有ValueError子句。
while True:
try:
//input
if "substring" not in somestring:
continue
except ValueError:
continue:
else:
break
您可以将基于交集的方法用于一些非常简洁,可扩展的代码:
import string
letters = set(string.ascii_letters)
nums = set(string.digits)
def has_alnum(word):
chars = set(word)
return chars & letters and chars & nums
如果您对速度特别感兴趣,那么手工编写循环可能会更快:
def loop_has_alnum(word):
letter = False
num = False
for ch in word:
if ch in letters:
if num:
return True
letter = True
elif ch in nums:
if letter:
return True
num = True
return False
将它们放在一个ipy
文件中后,我做了一些测试:
words = ["harry23", "a1", "8aaaa", "bbb0", "abc", "jim", "123"]
for word in words:
print("{:7} - {!s:5} - {}".format(word, bool(has_alnum(word)), loop_has_alnum(word)))
print("timing sets:")
%timeit [has_alnum(word) for word in words]
print("timing loop:")
%timeit [loop_has_alnum(word) for word in words]
结果如下:
harry23 - True - True
a1 - True - True
8aaaa - True - True
bbb0 - True - True
abc - False - False
jim - False - False
123 - False - False
timing sets:
3.32 µs ± 13.8 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
timing loop:
2.47 µs ± 130 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
证明他们都同意,但是循环要快一些。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.