我正在尝试使用正则表达式检查一个数字是否有效,但我收到一个错误,不知道如何写这个.
regex e{R"(((^666)|(^900-999))(-*)([^0-6])(-*)(\d{4}))"};
所以我想说的是"检查:一个不是666的数字,或者从900-999然后是一个可选的连字符,一个0-6的数字和一个可选的连字符,然后是4位数.
我尝试运行它,但无论我放什么,控制台告诉我,我的输入始终不正确.
任何帮助,将不胜感激.
这不是正则表达式非常适合的任务.
如果要检查的数字不等于666或在900-999范围内,则需要将其分解为以下丑陋的案例集:
一个不是6或9的数字,后面跟两个数字
6后跟一个不是6的数字,然后是一个数字
66后跟一个不是6的数字
作为一个正则表达式,它是(为了清晰起见添加了一些空格):
( [0-578][0-9][0-9] | 6[0-57-9][0-9] | 66[0-57-9] )
如您所见,这不是一个合理的方法.保留正则表达式以检查格式,然后在代码中单独检查逻辑问题(如"不能是666或900-999").作为奖励,这将允许您为这些逻辑问题提供精确的错误消息,而不是将它们归结为通用的"错误格式"错误.