Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正则表达式匹配所有罗马尼亚电话号码_C#_Regex - Fatal编程技术网

C# 正则表达式匹配所有罗马尼亚电话号码

C# 正则表达式匹配所有罗马尼亚电话号码,c#,regex,C#,Regex,我搜索了整个谷歌,想找到一些方法来验证电话号码是否是罗马尼亚人,但没有找到任何对我有帮助的。。。 我需要以下数字格式的正则表达式验证程序: 074xxxxxxx 075xxxxxxx 076xxxxxxx 078xxxxxxx 072xxxxxxx 077xxxxxxx 0251xxxxxx 0351xxxxxx 这是我制作的正则表达式,但它不起作用: { "Romania", new Regex("(/^(?:(?:(?:00\\s?|\\+)40\\s?|0)(?:7\\d{2}\\s?\

我搜索了整个谷歌,想找到一些方法来验证电话号码是否是罗马尼亚人,但没有找到任何对我有帮助的。。。 我需要以下数字格式的正则表达式验证程序:

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 countryRegex=new Dictionary()
{
{“USA”,新的正则表达式(“^[2-9]\\d{2}-\\d{3}-\\d{4}$”),
""英国",新的Regex("1300,1900,1902,6"("英国")("1300,1900,1902,6")("0,3,7,8)("8))("(13,(4"(,4"",34,
{“荷兰”,新的正则表达式(“(^\+[0-9]{2}\\\\\\\\\\\\+[0-9]{2}\\\\\\\\\(\\\+[0-9]{2}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\[0-9]{2}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\,
};

这与您的示例相符:

0(([7][456728])|([23]51)).*
试试这个:
^(?=0[723][2-8]\d{7})(?!.*()\1{2})。{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})$")}
};
static IDictionary countryRegex=new Dictionary()
{
{“USA”,新的正则表达式(“^[2-9]\\d{2}-\\d{3}-\\d{4}$”),
""英国",新的Regex("1300,1900,1902,6"("英国")("1300,1900,1902,6")("0,3,7,8)("8))("(13,(4"(,4"",34,
{“荷兰”,新的正则表达式(“(^\+[0-9]{2}\\\\\\\\\\\\+[0-9]{2}\\\\\\\\\(\\\+[0-9]{2}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\[0-9]{2}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\,
{“罗马尼亚”,新规则(“(?)()”0((?:72 | 74 | 75 | 76 | 77 | 78)(?(帕伦)\)(?\d)(?!\k{6})d{6}(?:251 | 351)(?(帕伦))(?\d)(?!\k{5})})
};
以下是模式的含义:

  • ^
    -匹配必须从输入字符串的开头开始
  • (?\()?
    )-可选地匹配
    字符。如果该字符存在,它将在名为
    paren
    的组中捕获该字符
  • 0
    -数字必须以单个
    0
  • (?:
    -开始一个非捕获组,用于匹配两种不同格式中的一种
  • (?:72 | 74 | 75 | 76 | 77 | 78)(?(paren)\)(?\d)(?!\k{6})\d{6}
    -第一种格式
    • (?:72 | 74 | 75 | 76 | 77 | 78)
      -后两位数字必须是
      72
      74
      75
      76
      77
      78
    • (?(paren)\)
      -如果期初
      )存在,则此处必须有一个结束
    • (?\d)
      -只匹配结尾七位数字中的第一位,并在名为
      first
    • (?!\k{6})
      -一种负向前瞻,确保剩余的六位数字与第一位数字不同
    • \d{6}
      -匹配剩余的六位数字
  • |
    -or运算符
  • (?:251 | 351)(?(paren)\)(?\d)(?!\k{5})\d{5}
    -第二种格式
    • (?:251 | 351)
      -接下来的三位数字必须是
      251
      351
    • (?(paren)\)
      -如果期初
      )存在,则此处必须有一个结束
    • (?\d)
      -只匹配结尾六位数字中的第一位,并在名为
      first
    • (?!\k{5})
      -一种负向前瞻,确保剩余的五位数字与第一位数字不同
    • \d{5}
      -匹配剩余的五位数字
  • -结束指定两种可能格式的非捕获组
  • $
    -匹配必须一直到输入字符串的末尾

您的定义不够清楚。您提供的硬编码前缀是否需要显式匹配?你允许某些特殊字符吗?您是否正试图仅提取数字以便将这些数字存储在数据库中?对不起,我已更新了描述。如果我能允许'()'和'-'分开数字那就太好了为什么要使用正则表达式?您可以手动检查字符串,省去所有的麻烦。正则表达式并不总是最好的解决方案。为了支持@MichaelPerrenoud所说的,我们很乐意帮助您构造这样一个正则表达式,但是构造一个好的正则表达式需要了解模式的规则。因为我们大多数人都不是罗马尼亚人,所以你需要非常清楚应该考虑的所有可能的变化。一个描述什么是匹配的,什么是不匹配的规则列表,以及一个应该匹配的和不应该匹配的示例列表,将使这成为一个体面的问题。我使用的是一个web应用程序的教程,它使用的是regexThis。它不检查长度是否正确,也不检查“不应该有相同的数字..如0000000 1111111等。”@新世界当我发布答案时,它符合需要…:/这很好用!感谢您提供更多信息,如果需要其他条件,现在我可以更新此表达式
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})$")}
};