[英]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.