【问题标题】:Regex count number of digits excluding space正则表达式计数位数,不包括空格
【发布时间】:2014-06-01 10:03:59
【问题描述】:

我想创建一个将验证以下条件的正则表达式:

  1. 仅包含数字
  2. 数字之间只能有一个空格
  3. 不包括空格的总位数必须在 16 到 19 之间

这是我目前的正则表达式:

^[0-9]+( [0-9]+)*$

基本上我得到了条件(1)和(2),所以我真的需要(3)的帮助。感谢您的宝贵时间。

【问题讨论】:

  • 这比你做的要简单;您需要 16-19 个数字,每个数字前面都可以有一个空格,第一个除外。因此,您正在寻找一个数字,后跟 {15,18} 数字,前面是可选空格。
  • 你在哪里用这个?例如是否在编程环境中,一个简单的函数调用来检查数字可能会作为第二步发生?同样相关的是正则表达式的方言,所以再一次,你在哪里使用这个?
  • 空格是可选的吗? 1 16 次有效吗?
  • 我在 PHP 上使用它来检查用户输入并在信用卡号格式不正确时警告他们。 :)

标签: regex


【解决方案1】:

小菜一碟。

^\d( ?\d){15,18}$

唯一值得一提的是{15,18}需要少一个——第一个\d已经吃了一个数字。

【讨论】:

    【解决方案2】:

    我认为以下应该可以解决问题:

    ^[0-9]( ?[0-9]){15}( ?[0-9])?( ?[0-9])?( ?[0-9])?$
    

    我不知道您使用的是什么正则表达式引擎。如果它不支持 {15} 那么你 将不得不在 15 次之前重复表达式 - 这并不漂亮,所以如果可能的话 您应该使用支持该功能的引擎。

    大多数 unix 实用程序(如 sed、grep 等)都有一个(非标准化)开关 扩展正则表达式支持,或替代可执行文件(如 egrep)。

    【讨论】:

    • 对不起,我没有缩进代码,所以 stackoverflow 重新格式化(即完全改变了)表达式。现已修复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多