[英]Regex to match all Romanian phone numbers
我在整個Google上進行了搜索,以找到一些方法來驗證電話號碼是否為羅馬尼亞語,但沒有找到任何對我有幫助的方法...我想要一種正則表達式驗證器,用於以下數字格式:
074xxxxxxx
075xxxxxxx
076xxxxxxx
078xxxxxxx
072xxxxxxx
077xxxxxxx
0251xxxxxx
0351xxxxxx
這是我制作的正則表達式,但是不起作用:
{ "Romania", new Regex("(/^(?:(?:(?:00\\s?|\\+)40\\s?|0)(?:7\\d{2}\\s?\\d{3}\\s?\\d{3}|(21|31)\\d{1}\\s?\\d{3}\\s?\\d{3}|((2|3)[3-7]\\d{1})\\s?\\d$)")}
它不驗證正確的數字格式。
更多細節:
如果該數字以我添加的初始數字開頭,則該數字無效。
x應該包含任何數字,但不應有相同的數字。例如0000000 1111111等。
它還可以具有以下格式(但不是強制性的):(072)xxxxxxx
有什么辦法嗎?
我想實現此功能以將這些數字存儲在數據庫中,並檢查其格式是否為羅馬尼亞語。 這是我需要添加正則表達式的代碼...應該有一個名為“ Romanian”的新正則表達式
static IDictionary<string, Regex> countryRegex = new Dictionary<string, Regex>()
{
{ "USA", new Regex("^[2-9]\\d{2}-\\d{3}-\\d{4}$")},
{ "UK", new Regex("(^1300\\d{6}$)|(^1800|1900|1902\\d{6}$)|(^0[2|3|7|8]{1}[0-9]{8}$)|(^13\\d{4}$)|(^04\\d{2,3}\\d{6}$)")},
{ "Netherlands", new Regex("(^\\+[0-9]{2}|^\\+[0-9]{2}\\(0\\)|^\\(\\+[0-9]{2}\\)\\(0\\)|^00[0-9]{2}|^0)([0-9]{9}$|[0-9\\-\\s]{10}$)")},
};
如果我正確理解規則,則此模式應該有效:
^(?<paren>\()?0(?:(?:72|74|75|76|77|78)(?(paren)\))(?<first>\d)(?!\k<first>{6})\d{6}|(?:251|351)(?(paren)\))(?<first>\d)(?!\k<first>{5})\d{5})$
因此,您可以將其添加到代碼中,如下所示:
static IDictionary<string, Regex> countryRegex = new Dictionary<string, Regex>()
{
{ "USA", new Regex("^[2-9]\\d{2}-\\d{3}-\\d{4}$")},
{ "UK", new Regex("(^1300\\d{6}$)|(^1800|1900|1902\\d{6}$)|(^0[2|3|7|8]{1}[0-9]{8}$)|(^13\\d{4}$)|(^04\\d{2,3}\\d{6}$)")},
{ "Netherlands", new Regex("(^\\+[0-9]{2}|^\\+[0-9]{2}\\(0\\)|^\\(\\+[0-9]{2}\\)\\(0\\)|^00[0-9]{2}|^0)([0-9]{9}$|[0-9\\-\\s]{10}$)")},
{ "Romania", new RegEx(@"^(?<paren>\()?0(?:(?:72|74|75|76|77|78)(?(paren)\))(?<first>\d)(?!\k<first>{6})\d{6}|(?:251|351)(?(paren)\))(?<first>\d)(?!\k<first>{5})\d{5})$")}
};
這是模式的含義:
^
-匹配項必須從輸入字符串的開頭開始 (?<paren>\\()?
-可選地匹配一個(
字符。如果存在,則將其捕獲到名為paren
的組中 0
數字必須以單個0
開頭 (?:
-開始一個非捕獲組,以匹配兩種不同格式之一 (?:72|74|75|76|77|78)(?(paren)\\))(?<first>\\d)(?!\\k<first>{6})\\d{6}
-第一種格式
(?:72|74|75|76|77|78)
-接下來的兩個數字必須是72
, 74
, 75
, 76
, 77
,或78
(?(paren)\\))
-如果在此處有開頭(
存在,則必須有一個結尾)
(?<first>\\d)
-僅匹配結尾七個數字中的第一個,並將其捕獲到名為first
的組中 (?!\\k<first>{6})
-負前瞻,可確保其余六個數字與第一個數字不同 \\d{6}
-匹配其余六位數字 |
- 或運算子 (?:251|351)(?(paren)\\))(?<first>\\d)(?!\\k<first>{5})\\d{5}
-第二種格式
(?:251|351)
-接下來的三位數必須為251
或351
。 (?(paren)\\))
-如果在此處有開頭(
存在,則必須有一個結尾)
(?<first>\\d)
-僅匹配結尾六位數字中的第一位並將其捕獲到名為first
的組中 (?!\\k<first>{5})
-負前瞻,可確保其余五個數字與第一個數字不同 \\d{5}
-匹配其余五位數字 )
-結束指定兩種可能格式的非捕獲組 $
-匹配項必須一直到輸入字符串的 試試這個: ^(?=0[723][2-8]\\d{7})(?!.*(.)\\1{2,}).{10}$
-負前瞻(?!...)
正在測試重復字符
我使用http://regexr.com/進行測試
這符合您的示例:
0(([7][456728])|([23]51)).*
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.