gpt4 book ai didi

c# - 我需要一个允许用户输入数字、加号、减号和括号的正则表达式

转载 作者:太空宇宙 更新时间:2023-11-03 22:05:26 24 4
gpt4 key购买 nike

我需要一个允许用户输入数字、加号、减号和括号的正则表达式。

用户只能输入:

  • 最多一个左括号'('。
  • 最多一个右括号')'。
  • 最多加一个“+”
  • 尽可能多的减号“-”,但不是一个接一个。
  • 恰好 11 个数字。

这里是有效的输入:

(0)+12-3-4-56-7890
+)0(12345-678-90
+01234567890
+(01234567890)
01234567890
-01-234+5678-90
(01234567890)
)01234567890(

以下是无效的:

0123456--7890
0((1234567890
01234567890))
++01234567890
123456
++123456789

我正在使用 C# 进行编程,如果它有帮助,左括号和右括号的顺序也可以成为强制性的。所以 )01234567890( 将无效。

提前致谢

最佳答案

此正则表达式通过了您的示例,但可能不是您要查找的内容。它应该为您指明正确的方向。

^(?!.*-{2,})(?!(?:.*\)){2,})(?!(?:.*\(){2,})(?!\+{2,})(?:\D*\d\D*){11}$
  • (?!.*-{2,}) 不能包含两个或多个连字符。
  • (?!(?:.*)){2,}) 不能包含两个或多个右括号。
  • (?!(?:.*(){2,}) 不能包含两个或多个左括号。
  • (?!+{2,}) 不能以两个以上的加号开头。
  • (?:\D*\d\D*){11} 必须包含 11 个被任何内容包围的数字字符实例。

但是,这非常困惑并且效率很低。我打赌正则表达式可以重写得更快,但不会更容易理解。

我建议您遵循 MisterJack 的建议,而不是追求正则表达式。它会更容易维护。

编辑


^(?!.*--)(?!.*(\(|\)|\+).*\1)(?:\D*\d\D*){11}$

我已经使用反向引用将括号和加号规则合并为一个负先行。这也将括号和加号的数量限制为每个只有一个。我无法将其限制为仅一组特定的字符,但您可以在第二遍中使用另一个正则表达式来做到这一点。

  • ^ 从字符串开头开始匹配
  • (?!.*--) 不允许连续的连字符
  • (?!.* ((|)|+).*\1) 不允许出现两个或多个 () 或 +
  • (?:\D*\d\D*){11} 必须包含11位数字,前后允许非数字字符,如连字符。
  • $ 匹配到字符串结尾

我尝试了消极和积极的前瞻来限制角色,但无法让它正常工作。我也尝试用 [()+-] 替换\D 但这也不起作用。也许其他人会添加评论以显示如何限制字符。我很想看看其他人是如何用这个正则表达式来做到这一点的。

关于c# - 我需要一个允许用户输入数字、加号、减号和括号的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8626054/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com