当前位置:  开发笔记 > 编程语言 > 正文

正则表达式不包括666和900-999

如何解决《正则表达式不包括666和900-999》经验,为你挑选了1个好方法。

我正在尝试使用正则表达式检查一个数字是否有效,但我收到一个错误,不知道如何写这个.

regex e{R"(((^666)|(^900-999))(-*)([^0-6])(-*)(\d{4}))"};

所以我想说的是"检查:一个不是666的数字,或者从900-999然后是一个可选的连字符,一个0-6的数字和一个可选的连字符,然后是4位数.

我尝试运行它,但无论我放什么,控制台告诉我,我的输入始终不正确.

任何帮助,将不胜感激.



1> duskwuff..:

这不是正则表达式非常适合的任务.

如果要检查的数字不等于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").作为奖励,这将允许您为这些逻辑问题提供精确的错误消息,而不是将它们归结为通用的"错误格式"错误.


如果正则表达式支持它,负向前瞻仍然*工作*.例如,不在900s或666中的所有三位数字:`(?!666)(?!9\d {2})\ d {3}`
推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有