如何判斷字串是否為合法數值、浮點、科學計數等格式
背景
如何判斷一個字串是合法的數值、浮點或者科學計數的格式?
首先想到的是正規表示式。
一些匹配規則如下:
"^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]
匹配空行的正規表示式:
[s| ]*
匹配HTML標記的正規表示式:/<(.*)>.*</1>|<(.*) />/
匹配首尾空格的正規表示式:(^s*)|(s*$)(像vbscript那樣的trim函式)
匹配Email地址的正規表示式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*
匹配網址URL的正規表示式:http://([w-]+.)+[w-]+(/[w- ./?%&=]*)?
相關文章
- Python判斷字串是否為字母或者數字(浮點數)Python字串
- 判斷URL字串是否合法字串
- linux 中如何判斷變數是否為數值Linux變數
- C#判斷字串是否合法C#字串
- js如何判斷一個變數值是否為undefinedJS變數Undefined
- C#判斷字串是否為日期格式C#字串
- 在Oracle中,如何判斷一個字串是否為數字?Oracle字串
- 判斷字串是否是合法的EMail (轉)字串AI
- java判斷輸入的字串是否為數字Java字串
- javascript中如何判斷一個字串是否為JSON格式JavaScript字串JSON
- 如何判斷一個字串是否為純數字的問題,當然也可以判斷一個字串是否為純字母字串
- js如何判斷一個變數是否具有值JS變數
- js如何判斷一個變數是否有值JS變數
- js判斷一個變數是否為字串型別JS變數字串型別
- 如何判斷一個值是否等於NaNNaN
- 判斷字串是否為空字串
- js判斷引數是否為非數字JS
- js判斷指定的值是否為整數的程式碼JS
- java字串、異常小練習--判斷qq是否合法Java字串
- js如何判斷一個變數是否宣告並賦值JS變數賦值
- Java判斷一個整數是否為奇數Java
- 判斷一個數是否為質數(程式碼)
- 【轉】Java中判斷字串是否為數字的五種方法Java字串
- js判斷字串是否為空JS字串
- JavaScript判斷字串是否為空JavaScript字串
- java判斷字串是否為空Java字串
- go 如何優雅的判斷變數是否為 nilGo變數
- 利用ORACLE正規表示式判斷字串是否為日期格式Oracle字串
- javascript判斷變數是否是數值型別程式碼JavaScript變數型別
- postgresql判斷是否為數字的方法SQL
- php中判斷變數是否為空PHP變數
- 判斷物件值是否為空物件
- Python中判斷是否為數字字串的方法是什麼?Python字串
- 33判斷字串是否為迴文字串
- 關於字串的一些常用判斷 是否全部為數字 是否包含有數字 是否包含有英文字串
- R語言中如何將科學計數法轉換為數值型R語言
- python如何判斷一個數是否是整數Python
- javascript如何判斷一個變數是否是整數JavaScript變數