Python中如何校验仅含加号与数字的字符串(提醒应用场景)
校验手机号格式的解决方案
正则表达式方案(推荐)
正则里的+是表示“匹配一次或多次”的元字符,要匹配字面的加号,要么用反斜杠\转义,要么把它放进字符集[]里(字符集内的特殊字符无需转义)。
针对你的需求,分两种场景给出正则:
必须以加号开头,后续全为数字(严格符合国家码+手机号格式):
import re def validate_contact(s): return bool(re.fullmatch(r'^\+\d+$', s))规则解释:
^锚定字符串开头\+匹配字面意义的加号\d+匹配1个及以上数字$锚定字符串结尾re.fullmatch确保整个字符串完全匹配规则,避免部分匹配的情况
允许可选加号开头(即可以不带加号,但带加号必须在开头,整体仅含数字和加号):
修改正则为r'^\+?\d+$',其中?表示加号可以出现0次或1次。
非正则手动校验方案
如果不想依赖正则,可拆分逻辑实现:
def validate_contact(s): if not s: return False if s.startswith('+'): # 去掉开头加号后,剩余部分必须全是数字 return s[1:].isdigit() else: # 无加号时,整个字符串必须全是数字 return s.isdigit()
这个逻辑先判断字符串是否为空,再根据是否以加号开头分别校验剩余内容,完美解决startswith()和isdigit()冲突的问题。
内容的提问来源于stack exchange,提问作者user25700860
相关产品推荐
相关产品推荐

