0

嗨,我有 ac# 应用程序,它接受 4 位数的分机号码并为其设置掩码。我有一种情况,需要根据数量应用两个不同的面具。

First: If the number starts with 47 or 5 return mask A.

Second: If the number starts with 6 or 55 return mask B. 

所以我以这种方式设置了我的正则表达式,但我不确定它为什么设置错误。

//Here I am trying to say, anything that start with 47 or 5 with the next 3 digits taking any number
Match first = Regex.Match(num, "^(47|(5[0123456789]{3}))");

//anything that start with 6 or 55 with the next 2 digits taking numbers 0-5
Match secong = Regex.Match(num, "(6|55[123450]{2})");

如果我使用上面的输入 num=5850 或 num=5511 两者都适用,但显然 5850 应该使用 Mask A 而 5511 应该使用 Mask B

我该如何解决??

谢谢!

4

4 回答 4

2

考虑以下...

Match first = Regex.Match(num, "^(47[0-9]{2}|5[0-9-[5]]{1}[0-9]{2})");

Match second = Regex.Match(num, "^(6[0-9]{3}|55[0-9]{2})");
于 2013-09-24T18:11:16.433 回答
1

这些应该为你做。

这匹配任何以 47 或 5 开头的 4 位数字,不包括 5 作为第二个数字。

^(47|5([0-4]|[6-9]))\d{2}$

这匹配任何以 6 或 55 开头的 4 位数字。

^(6\d|55)\d{2}$
于 2013-09-24T18:05:51.283 回答
1

我想这会覆盖你。请注意,您可以将 \d 用于 0-9,范围为 0-5,并且您将边界指示符 (^) 离开第二个指示符。注意我没有在第一部分的第一部分使用范围或 \d,因为您不想匹配 55。还要注意分组。

//anything that start with 47 or 5 with the next 3 digits taking any number (but not 55!)
Match first = Regex.Match(num, "^((47|5[012346789])\d{2})");

//anything that start with 6 or 55 with the next 2 digits taking numbers 0-5
Match secong = Regex.Match(num, "^((6|55)[0-5]{2})");
于 2013-09-24T18:10:32.083 回答
0

看起来你应该使用 4 个正则表达式

/^47\d{3}/

/^5\d{4}/

/^6\d{4}/

/^55\d{3}/

请注意以开头的数字如何与55您的两种情况匹配,但反过来不适用于以5您开头的数字应该使用该事实来区分它们


如果你想组合正则表达式,那很好

/(^47\d{3})|(^5\d{4})/

注意:您可能还想使用输入锚的结尾:$或单词边界或负前瞻来匹配输出的结尾。

于 2013-09-24T18:03:37.407 回答