【发布时间】:2015-12-09 02:24:47
【问题描述】:
我正在尝试使用正则表达式来检查一个数字是否有效,但我收到一个错误并且不知道如何编写。
regex e{R"(((^666)|(^900-999))(-*)([^0-6])(-*)(\d{4}))"};
所以我想说的是“检查:一个不是 666 或 900-999 的数字,然后是一个可选的连字符,一个从 0-6 的数字和一个可选的连字符,然后是 4 个数字。
我尝试运行它,但无论我输入什么,控制台都会告诉我我的输入总是不正确的。
任何帮助将不胜感激。
【问题讨论】:
-
"900-999" 表示数量范围,正则表达式对字符模式起作用。一般来说,您应该考虑分解您的模式以查看哪些部分有效,哪些无效。 “
(^666)”是指“不是 666 的数字”吗?可能不是,它可能是指“一个不是6的字符后跟两个6字符。 -
@BrianCain 不,
^666指的是出现在字符串开头的字符串“666”。^仅反转字符集(例如,[^a-z])。 -
@duskwuff - 好的,好点。所以我会回去分解模式。让我们看看我们是否可以匹配“一个不是'666'的数字”:这个数字必须完全是三个数字吗? ...最多三位数?
-
如果连字符前的数字小于 100 会怎样?这是允许的吗? 001-0-1234 应该是有效输入吗? 1-0-1234 呢?或者(不带连字符)101234?
-
而
-*匹配一个可选的sequence 破折号,而不仅仅是一个可选的破折号。你可能想要-?。