如何判断字符串是否为合法数值、浮点、科学计数等格式

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS PostgreSQL Serverless,0.5-4RCU 50GB 3个月
推荐场景:
对影评进行热评分析
简介:

背景

如何判断一个字符串是合法的数值、浮点或者科学计数的格式?

首先想到的是正则表达式。

一些匹配规则如下:

  "^\d+$"                   //非负整数(正整数   +   0)       
  "^[0-9]*[1-9][0-9]*$"     //正整数       
  "^((-\d+)|(0+))$"         //非正整数(负整数   +   0)       
  "^-[0-9]*[1-9][0-9]*$"    //负整数       
  "^-?\d+$"               //整数       
  "^\d+(\.\d+)?$"           //非负浮点数(正浮点数   +   0)       
  "^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$"     //正浮点数       
  "^((-\d+(\.\d+)?)|(0+(\.0+)?))$"                                                      //非正浮点数(负浮点数   +   0)       
  "^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"  //负浮点数       
  "^(-?\d+)(\.\d+)?$"       //浮点数  

PostgreSQL支持正则表达,UDF函数,可以完成这项工作。

正文

将正则表达式写成函数即可完成对应的判断,例子

create or replace function check_int(text) returns boolean as $$  
  select $1 ~ '^\d+$';  
$$ language sql strict;  

验证

postgres=# select check_int('1');  
 check_int   
-----------  
 t  
(1 row)  
  
postgres=# select check_int('123');  
 check_int   
-----------  
 t  
(1 row)  
  
postgres=# select check_int('123.1');  
 check_int   
-----------  
 f  
(1 row)  
  
postgres=# select check_int('');  
 check_int   
-----------  
 f  
(1 row)  
  
postgres=# select check_int('abc');  
 check_int   
-----------  
 f  
(1 row)  

如果不区分格式的话,可以使用PostgreSQL的强制转换以及函数来处理,使用异常捕获即可。

postgres=# create or replace function check_numeric(text) returns boolean as $$  
declare  
begin  
  perform ($1)::numeric;  
  return true;  
exception when others then  
  return false;  
end;  
$$ language plpgsql strict;  
CREATE FUNCTION  

验证

postgres=# select check_numeric('12..1');  
 check_numeric   
---------------  
 f  
(1 row)  
  
postgres=# select check_numeric('12.1');  
 check_numeric   
---------------  
 t  
(1 row)  
  
postgres=# select check_numeric('12.1a');  
 check_numeric   
---------------  
 f  
(1 row)  

如果你要强转异常的值,可以自定义cast进行转换,例子.

postgres=# select '12.1a.1'::text::numeric;    
ERROR:  invalid input syntax for type numeric: "12.1a.1"    
    
postgres=# create or replace function text_to_numeric(text) returns numeric as $$    
select to_number($1,'9999999999999999999999999.99999999999999');    
$$ language sql strict;    
CREATE FUNCTION    
postgres=# select text_to_numeric('12.1a.1');    
 text_to_numeric     
-----------------    
           12.11    
(1 row)    
    
postgres=# create cast (text as numeric) with function text_to_numeric(text) ;    
CREATE CAST    
    
postgres=# select '12.1a.1'::text::numeric;    
 numeric     
---------    
   12.11    
(1 row)    

补充

补充 

//正则匹配 

匹配中文字符的正则表达式: [\u4e00-\u9fa5] 

匹配双字节字符(包括汉字在内):[^\x00-\xff] 

匹配空行的正则表达式:\n[\s| ]*\r 

匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/ 

匹配首尾空格的正则表达式:(^\s*)|(\s*$)(像vbscript那样的trim函数) 

匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 

匹配网址URL的正则表达式:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)? 
目录
相关文章
|
12月前
|
敏捷开发 监控 安全
螺旋模型是什么?在软件开发中如何降低风险?
螺旋模型是一种结合了瀑布模型和快速原型模型的软件开发方法,强调风险分析的重要性。每个迭代周期包含计划制定、风险分析、工程实施和客户评估四个阶段,旨在通过持续的风险管理和客户反馈,提高软件质量和项目成功率。该模型由Barry Boehm于1988年提出,适用于需求不稳定、高风险的项目。
|
SQL 关系型数据库 MySQL
实时数仓 Hologres操作报错合集之遇到报错:连接到 FE 失败,剩余的连接槽保留用于非复制超级用户连接,该怎么处理
在使用阿里云实时数仓Hologres时,可能会遇到不同类型的错误。例如:1.内存超限错误、2.字符串缓冲区扩大错误、3.分区导入错误、4.外部表访问错误、5.服务未开通或权限问题、6.数据类型范围错误,下面是一些常见错误案例及可能的原因与解决策略的概览。
|
9月前
|
存储 设计模式 监控
快速定位并优化CPU 与 JVM 内存性能瓶颈
本文介绍了 Java 应用常见的 CPU & JVM 内存热点原因及优化思路。
909 166
|
8月前
智启芯篇·共赴北京|“开放·连接 ”2025玄铁 RISC-V 生态大会议程公布!
2025年2月28日“开放·连接 ”2025玄铁 RISC-V 生态大会议程公布。诚邀您参加“开放·连接”2025玄铁RISC-V生态大会。汇聚全球行业专家、技术领袖及资深工程师于北京,共同探讨RISC-V技术趋势与产业未来,共筑“芯”篇章。席位有限,欢迎扫码锁定参会席位!
489 1
|
安全 Shell Linux
【Shell 命令集合 系统管理 】Linux 以超级用户(root)的身份执行特权命令 sudo命令 使用指南
【Shell 命令集合 系统管理 】Linux 以超级用户(root)的身份执行特权命令 sudo命令 使用指南
432 1
|
10月前
|
JSON API 数据处理
如何运用获得京东商品详情API接口搬运商品到自己的电商平台?(一篇文章全搞定)
本文介绍如何利用京东商品详情API接口,将商品信息高效搬运至第三方电商平台。主要内容包括:前期准备(注册账号、申请权限、阅读文档、技术准备),API接口调用(构造请求URL、发送请求、解析返回数据、调用频率限制),数据处理与上架(清洗整理、分类设置、信息上传、商品审核),定时更新与维护(更新商品信息、信息维护、错误处理与日志记录),以及案例分析和优化建议。通过合理使用该接口,可提高运营效率,丰富商品种类,增强平台竞争力。
309 13
|
10月前
|
Cloud Native JavaScript Docker
云原生技术:构建现代应用的基石
在数字化转型的浪潮中,云原生技术如同一艘承载梦想的航船,引领企业驶向创新与效率的新海域。本文将深入探索云原生技术的核心价值,揭示其如何重塑软件开发、部署和运维模式,同时通过一个简易代码示例,展现云原生应用的构建过程,让读者领略到云原生技术的魅力所在。
|
Java 测试技术 API
如何检查字符串是否仅包含数字
【8月更文挑战第22天】
588 0
|
负载均衡 应用服务中间件 nginx
经验大分享:nginx实现请求转发
经验大分享:nginx实现请求转发
688 1
|
JSON JavaScript 数据格式
【深入探究C++ JSON库】解析JSON元素的层级管理与遍历手段
【深入探究C++ JSON库】解析JSON元素的层级管理与遍历手段
1940 2