C# 在数字之间带有连字符的正则表达式

C# 在数字之间带有连字符的正则表达式,c#,regex,C#,Regex,我必须检查用户输入的字符串是否采用以下特定格式,例如: 123-1234-1234567-1 即前3位连字符后,4位连字符后,7位连字符后,然后是一位数字 我使用了下面的正则表达式 @"^\(?([0-9]{3})\)?[-. ]?([0-9]{4})[-. ]?([0-9]{7})[-. ]?([0-9]{1})$" 对于上面的表达式,它可以正常工作,但它也将在不使用-的情况下传递表达式 eg:- 123-1234-1234567-1 //pass 1231234123456

我必须检查用户输入的字符串是否采用以下特定格式,例如:

123-1234-1234567-1
即前3位连字符后,4位连字符后,7位连字符后,然后是一位数字

我使用了下面的正则表达式

@"^\(?([0-9]{3})\)?[-. ]?([0-9]{4})[-. ]?([0-9]{7})[-. ]?([0-9]{1})$"
对于上面的表达式,它可以正常工作,但它也将在不使用
-
的情况下传递表达式

eg:-  123-1234-1234567-1 //pass
      123123412345671    //also getting pass.
第二个字符串应该失败。我应该对正则表达式做哪些更改才能实现相同的效果?

您可以简单地使用:

^\d{3}-\d{4}-\d{7}-\d$
如果要允许点和空格也用作分隔符,请使用:

^\d{3}[-. ]\d{4}[-. ]\d{7}[-. ]\d$

问题是在
[.]
之后有可选的量词
。 移除它们,它应该可以正常工作

@"^\(?([0-9]{3})\)?[-. ]([0-9]{4})[-. ]([0-9]{7})[-. ]([0-9]{1})$"


使前面的模式成为可选模式,因为它匹配0或1个字符。因此,在第二个示例中,正则表达式引擎安全地匹配零
-
以匹配整个字符串

@downvoter您能告诉我这个问题的问题是什么吗?谢谢您的回答。这很简单,正是我所需要的。它将是仅由
-
分隔的数字,但我不知道为什么有人否决了我的问题。不是很清楚吗?你的问题对我来说已经很清楚了,你的尝试已经清楚地表现出来了。不要担心某个喜欢触发的成员会投反对票。谢谢你的回答。你的选择也让我大吃一惊。谢谢你的帮助。会投你的反对票吗。。但我不知道为什么有人否决了我的问题。不清楚吗?@Sachu,不客气。问题真的很清楚,但我不知道为什么会被否决。