正则表达式使用C#限制只出现一次打开和关闭括号

如何确保输入文本中不允许多个括号“(”和“)”? 我有以下表达式,允许数字,空格,连字符和括号。

Regex.Match(text, @"^[0-9 (,),-]+$").Success 

我不支持“((123)456-7891或(91)123-23123(1)之类的内容。正确的字符串可以是:”(123)1231231或(121)123-213123。

编辑:抱歉不清楚。 要求是仅允许数字,空格,连字符和括号(仅限一组)。 具体而言,“(”应该总是有一个右括号“)”。 正如你们其中一个人所说的那样没有paren或者一套paren。 如果有人也可以告诉如何在任何位置允许paren不仅在开始时?

这样做:

 @"^(?:[^()]*|[^()]*\([^()]*\)[^()]*)$" 

并且只允许数字,连字符和空格:

 @"^(?:[-0-9 ]*|[-0-9 ]*\([-0-9 ]*\)[-0-9 ]*)$" 

这基本上说要么没有parens,要么只有一组parens。 如果您只想要具有一组parens的字符串,则可以使用以下更简单的forms:

 @"^[^()]*\([^()]*\)[^()]*$" 

并且只允许数字,连字符和空格:

 @"^[-0-9 ]*\([-0-9 ]*\)[-0-9 ]*$" 
 ^[^\(\)]*\([^\(\)]*\)[^\(\)]*$ 

根据你的例子为我工作。 但是,这不会确保短语的其余部分是数字。 例如,这个正则表达式将匹配(123) 1231231abc(def)ghi让我知道这是否正常。

如果它始终是开括号后跟3个数字,那么关闭括号,将其放入正则表达式:

 @"^\(\d{3}\)\s?\d{3}-?\d{4}$" 

也就是说,开括号,三个数字,近括号,可选空格,三个数字,可选连字符,四个数字。

你问的问题和你想要的东西可能是两个不同的东西:-)一些例子:

  • 1231234(12)
  • 1231234
  • )1231234
  • (123412

他们合法吗?

从这开始:

法律:

  • 123456
  • 1234-456
  • (123)345
  • (123)345
  • (123)345-678
  • (123)345 678

正则表达式:

 @"^(\(\[0-9]+\) ?)?\[0-9]+(-\[0-9]+)?$" 

我认为这适用于您指定的上述实例:

 Regex.Match(text, @"^\([0-9]{3}\)\s?[0-9]{3}-?[0-9]+$").Success 

这将匹配字符串末尾的任意位数。 您没有指定允许的数量。 如果你想使这个更具体,你可以用{4,6}替换最后一个+符号,其中4是 – 后面的最小位数,而6是最大值。