正则表达式使用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) 1231231
和abc(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是最大值。