我正在尝试使用正则表达式来检查数字是否有效,但出现错误并且不确定如何编写。

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”)。作为奖励,这将允许您为这些逻辑问题提供精确的错误消息,而不是将它们归为通用的“格式错误”错误。

    关于c++ - 正则表达式不包括 666 和 900-999,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34169732/

    10-11 18:04