簡體   English   中英

正則表達式以匹配所有羅馬尼亞電話號碼

[英]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) -接下來的兩個數字必須是7274757677 ,或78
    • (?(paren)\\)) -如果在此處有開頭(存在,則必須有一個結尾)
    • (?<first>\\d) -僅匹配結尾七個數字中的第一個,並將其捕獲到名為first的組中
    • (?!\\k<first>{6}) -負前瞻,可確保其余六個數字與第一個數字不同
    • \\d{6} -匹配其余六位數字
  • | - 運算子
  • (?:251|351)(?(paren)\\))(?<first>\\d)(?!\\k<first>{5})\\d{5} -第二種格式
    • (?:251|351) -接下來的三位數必須為251351
    • (?(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.

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