如何在perl中验证数字?

2024-02-10

我知道有一个图书馆可以做到这一点

使用 Scalar::Util qw(looks_like_number);

但我想使用 perl 正则表达式来做到这一点。我希望它适用于双数,而不仅仅是整数。

所以我想要比这更好的东西

$var =~ /^[+-]?\d+$/

thanks.


构建单个正则表达式来验证数字确实很困难。需要考虑的标准太多了。Perlfaq4 http://perldoc.perl.org/perlfaq4.html#How-do-I-determine-whether-a-scalar-is-a-number/whole/integer/float?包含一节“如何确定标量是否是数字/整数/整数/浮点?

该文档中的代码显示了以下测试:

if (/\D/)                          {print "has nondigits\n"      }
if (/^\d+$/)                       {print "is a whole number\n"  }
if (/^-?\d+$/)                     {print "is an integer\n"      }
if (/^[+-]?\d+$/)                  {print "is a +/- integer\n"   }
if (/^-?\d+\.?\d*$/)               {print "is a real number\n"   }
if (/^-?(?:\d+(?:\.\d*)?|\.\d+)$/) {print "is a decimal number\n"}
if (/^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/) {
    print "is a C float\n"
}
  • 第一个测试取消了无符号整数的资格。
  • 第二次测试合格了一个整数。
  • 第三个测试合格一个整数。
  • 第四个测试限定正/负符号整数。
  • 第五次测试合格的实数。
  • 第六次测试合格十进制数。
  • 第七个测试验证了 C 风格科学记数法中的数字。

因此,如果您正在使用这些测试(不包括第一个测试),您将必须验证一个或多个测试是否通过。然后你就有了一个号码。

另一种方法,由于你不想使用Scalar::Util这个模块,所以可以从IN Scalar::Util的代码中学习。 looks_like_number() 函数的设置如下:

sub looks_like_number {
  local $_ = shift;

  # checks from perlfaq4
  return $] < 5.009002 unless defined;
  return 1 if (/^[+-]?\d+$/); # is a +/- integer
  return 1 if (/^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/); # a C float
  return 1 if ($] >= 5.008 and /^(Inf(inity)?|NaN)$/i) 
           or ($] >= 5.006001 and /^Inf$/i);

  0;
}

您应该能够使用该函数中适合您情况的部分。

不过,我想指出的是,Scalar::Util是核心 Perl 模块;它与 Perl 一起提供,就像strict做。最好的做法可能就是直接使用它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在perl中验证数字? 的相关文章

随机推荐

  • System.Net.WebException:操作已超时

    我有一个大问题 我需要一次发送 200 个对象并避免超时 while true NameValueCollection data new NameValueCollection data Add mode nat using var cli
  • Mybatis Generator:如何生成指定模式的所有表

    Mysql数据库总共有4个模式 我只想生成一个名为 booking 的指定模式 但它总是为所有模式生成所有表 所以我需要你的帮助 下面是我的generatorConfig xml
  • CSSOM 和 DOM 创建是异步的吗?

    我读到 CSSOM 创建是网页性能的瓶颈 但似乎有一些方法可以解决这个问题 比如添加media样式表链接的属性 我试图了解如何优化我的网络应用程序 并发现了这个非常有趣的事情link https developers google com
  • 为什么使用 lme4 的线性混合模型的输出显示一个因子水平而不是另一个水平?

    我正在使用lme4打包并运行线性混合模型 但我很困惑 但输出并期望我遇到错误 即使我没有收到错误消息 基本问题是当我适合这样的模型时lmer Values stimuli timeperiod scale poly distance cod
  • Mongodb查询异常慢

    我的 mongodb 相当简单 一个数据集 条目在 3 层上有大约 30 个属性 此类条目最多可包含 5000 个字符左右 我有 500k 个 当我执行以下查询时 db images find featureData cedd exists
  • 如何在不使用文本字段的情况下在 MySQL 数据库中存储哈希值

    我正在存储独特的用户代理在 MySQL MyISAM 表中 因此当我必须查看它是否存在于表中时 我会检查md5 hash它存储在 TEXT 字段旁边 User Agents id INT user agent TEXT hash VARCH
  • 如何在 typescript / Angular 中设置子 html 元素的样式

    我正在使用 ionic 3 构建混合移动应用程序 要求之一是用户能够动态更改工具栏颜色 页面渲染后 html 如下所示 div this div i can control div but this one is generated by
  • Aurelia 有虚拟元素吗?

    Knockout JS有虚拟元素的概念 这些是 无头 元素 您可以将其绑定到没有 HTML 元素作为容器的元素 这允许您在不发出外部 HTML 的容器中绑定数组 例如 在 Knockout JS 中 您可以执行以下操作 li li 一系列l
  • 防止 WPF DataGrid 中的多行选择

    我在 WPF DataGrid 中有以下 XAML 标记
  • NLTK python 错误:“TypeError:‘dict_keys’对象不可下标”

    我正在按照课堂作业的说明进行操作 并且应该在文本文件中查找最常用的 200 个单词 这是代码的最后一部分 fdist1 FreqDist NSmyText vocab fdist1 keys vocab 200 但是当我在 vocab 20
  • Pickle:类型错误:需要类似字节的对象,而不是“str”[重复]

    这个问题在这里已经有答案了 当我在 python 3 中运行以下代码时 我不断收到此错误 fname1 auth cache s username fname fname1 encode encoding utf 8 fname fname
  • 自定义图像视图android

    我的自定义视图如下所示 package com mypackage import java util ArrayList import java util List import android content Context import
  • 以数组形式返回 group_concat 数据

    我想返回使用 group concat 作为数据数组从数据库检索的值 是否可以在 mysql 查询中执行此操作 或者我需要将数据分解成数组吗 GROUP CONCAT sh hold id as holds 返回这个 holds gt 3
  • 为什么从对象继承在 Python 中会有所不同? [复制]

    这个问题在这里已经有答案了 当类从无继承时 我有一个实例类型的对象 gt gt gt class A pass gt gt gt a A gt gt gt type a
  • 将 AVAssetWriter 与原始 NAL 单元结合使用

    我在 iOS 文档中注意到AVAssetWriterInput你可以通过nil为了outputSettings字典来指定输入数据不应重新编码 用于对附加到输出的媒体进行编码的设置 传递 nil 来指定不应重新编码附加的样本 我想利用此功能来
  • 如何为TableView创建NSIndexPath

    我需要在我定义的函数中删除表的第 1 行 为了使用deleteRowAtIndexPath你必须使用一个IndexPath定义了部分和行 如何创建这样的索引路径 以 int 1 作为唯一成员的数组将会崩溃 NSLog 消息指出该部分也需要定
  • pandas 按日期和年份分组并汇总金额

    我有这样的熊猫数据框 d dollar amount 200 25 350 00 120 00 400 50 1231 25 700 00 350 00 200 25 2340 00 date 22 01 2010 22 01 2010 2
  • 调试时如何跳出while循环

    在 Eclipse 中调试期间 我的代码进入了 while 循环 我不想循环直到满足条件 所以请告诉我如何在调试期间退出 while 循环 我看到 F7 在调试菜单下被禁用 请参阅此处的屏幕截图 You can select the lin
  • javascript 函数 btoa 的 C# 版本

    我需要将一些内容从 js 重新编码为 c 利用 js 中的 btoa 方法对一串 unicode 字符将它们转换为 base64 但是 据我所知 javascrpt 使用的编码与 c 中可用的所有编码不同 我需要编码完全相同 并且不会在这些
  • 如何在perl中验证数字?

    我知道有一个图书馆可以做到这一点 使用 Scalar Util qw looks like number 但我想使用 perl 正则表达式来做到这一点 我希望它适用于双数 而不仅仅是整数 所以我想要比这更好的东西 var d thanks