簡體   English   中英

電話號碼檢查的正則表達式不起作用

[英]Regular expression for phone number check does not work

我正在嘗試使用正則表達式來檢查電話號碼。 下面是我正在使用的代碼:

phnum ='1-234-567-8901'
pattern =  re.search('^\+?\d{0,3}\s?\(?\d{3}\)?[-.\s]?d{3}[-.\s]?d{4}$',phnum,re.IGNORECASE)
print(pattern)

即使對於簡單的數字,它似乎也不起作用。 誰能糾正我哪里出錯了?

這是一個潛在的解決方案。 我不擅長正則表達式,所以我可能會遺漏一些東西。

import re

phone_pattern = re.compile(r"^(\+?\d{0,2}-)?(\d{3})-(\d{3})-(\d{4})$")
phone_numbers = ["123-345-6134",
                 "1-234-567-8910",
                 "+01-235-235-2356",
                 "123-123-123-123",
                 "1-asd-512-1232",
                 "a-125-125-1255",
                 "234-6721"]

for num in phone_numbers:
    print(phone_pattern.findall(num))

Output:

[('', '123', '345', '6134')]
[('1-', '234', '567', '8910')]
[('+01-', '235', '235', '2356')]
[]
[]
[]
[]

直接的問題是您在最后兩個d :s 之前缺少\ 此外,第一個\s顯然不匹配破折號。

我也強烈鼓勵所有正則表達式r'...'原始字符串,以避免 Python 的字符串解析器在它們到達正則表達式引擎之前評估一些反斜杠序列。

phnum ='1-234-567-8901'
pattern = re.search(
    r'^\+?\d{0,3}[-.\s]?\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}$',
    phnum, re.IGNORECASE)
print(pattern)

演示: https://ideone.com/EYtTKZ

更根本的是,也許你應該只接受一個右括號,如果它之前有一個左括號,等等。一種常見的方法是在嘗試將它們用作電話號碼之前標准化數字序列,但這有點像雞和蛋的問題。 (例如,您不想在大量數字或 IP 地址上得到誤報。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM