我正在尝试使用正则表达式来检查数字是否有效,但出现错误并且不确定如何编写。
regex e{R"(((^666)|(^900-999))(-*)([^0-6])(-*)(\d{4}))"};
所以我想说的是“检查:一个不是 666 或 900-999 的数字,然后是一个可选的连字符,一个 0-6 的数字和一个可选的连字符,然后是 4 位数字。
我尝试运行它,但无论我输入什么,控制台都会告诉我我的输入总是不正确。
任何帮助,将不胜感激。
最佳答案
这不是正则表达式非常适合的任务。
如果要检查不等于 666 或范围 900-999 的数字,则需要将其分解为以下丑陋的一组情况:
作为正则表达式,那就是(为了清楚起见添加了一些空格):
(
[0-578][0-9][0-9]
|
6[0-57-9][0-9]
|
66[0-57-9]
)
如您所见,这不是解决此问题的合理方法。保留用于检查格式的正则表达式,然后在代码中单独检查逻辑问题(例如“不能是 666 或 900-999”)。作为奖励,这将允许您为这些逻辑问题提供精确的错误消息,而不是将它们归为通用的“格式错误”错误。
关于c++ - 正则表达式不包括 666 和 900-999,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34169732/