检查字符串是不是仅包含数字

Posted

技术标签:

【中文标题】检查字符串是不是仅包含数字【英文标题】:Check if a string contains only number检查字符串是否仅包含数字 【发布时间】:2016-06-01 18:33:56 【问题描述】:

我正在尝试检查 string 是否仅包含以下格式的有效数字

123.456
123
.356

但它应该拒绝任何包含非数字的内容,包括双点。以下是一些无效格式

d123.456
123d
12d3
d.1256
12d.456
12.d12
12.d45d
12.45.56

我做了以下事情

SELECT CASE WHEN '123.00' NOT LIKE '%[^0-9.]%' THEN 'Valid' ELSE 'Invalid' END

除了字符串中有多个点的情况外,何时似乎有效。

如何调整正则表达式以只允许一个点,否则返回“无效”?

【问题讨论】:

那些不是正则表达式 【参考方案1】:

我建议try_convert():

select (case when try_convert(col, float) is not null then 'valid' else 'invalid' end)

一个可能的缺点是指数格式;例如,1e6 是一个有效的数字。

另一种方法是where 方法;你只需要更完整的逻辑:

select (case when col like '%[^0-9.]%' then 'invalid'
             when col like '%.%.%' then 'invalid'
             else 'valid'
        end)

【讨论】:

谢谢你说的很有道理!【参考方案2】:

有一个sql server内置函数:

Select CASE WHEN isnumeric([fieldname]) THEN 'Valid' ELSE 'Invalid" END

【讨论】:

ISNUMERIC 检查数据类型而不是值,因此任何字符串都将返回 false 选择 isumeric('123.00') 返回 true @MikeA 这绝对是错误的。 IsNumeric 不检查数据类型。那有什么意义呢?这个怎么样?选择 ISNUMERIC('1') IsNumeric 不是这里的答案。在这种情况下,它返回的误报太多了。 @MikeA 当输入表达式计算为数值数据类型时。这意味着它可以转换为数字数据类型。它与输入的数据类型无关。【参考方案3】:

TRY_PARSE 将让您将输入值与您决定允许的任何/所有数字数据类型进行比较——例如:

SELECT 
   TRY_PARSE('123.456' as int) as [int],
   TRY_PARSE('123.0' as float) as [float],
   TRY_PARSE('d123.456' as int) as [int],
   TRY_PARSE('d123.456' as float) as [float]

FWIW -- ISNUMERIC 经常被建议,并且肯定是最好的-听起来函数名称 :-) -- 但并不像大多数人所期望的那样工作。 (它允许数学和货币符号等)

【讨论】:

这是我得到的 Msg 195, Level 15, State 10, Line 14 'TRY_PARSE' 不是一个公认的内置函数名。 SQL Server 2012 +(对不起,我没有澄清)【参考方案4】:

如果您不依赖正则表达式,SQL Server 有一个ISNUMERIC 函数可以用于此。

当输入表达式计算为有效的数值数据类型时,ISNUMERIC 返回 1;否则返回 0。

【讨论】:

ISNUMERIC 检查数据类型而不是值,因此任何字符串都将返回 false 他们的例子似乎有争议:SELECT name, **isnumeric(name) AS IsNameANumber**, database_id, isnumeric(database_id) AS IsIdANumber FROM sys.databases; ISNUMERIC 是一个可怕的命名函数。它应该更像是 ValueIsSomethingThatCanBeConvertedToAnyDatatypeThatIsRoughlyANumber。例如 1e3 将返回 true。 @MikeA 这绝对是错误的。 IsNumeric 不检查数据类型。那有什么意义呢?这个怎么样?选择 ISNUMERIC('1') 我同意它评估表达式,但它也接受 +-、货币符号和 e 表示幂。

以上是关于检查字符串是不是仅包含数字的主要内容,如果未能解决你的问题,请参考以下文章

如何检查给定的 c++ 字符串或 char* 是不是仅包含数字?

检查字符串是不是包含字母数字

检查字符串是不是仅包含特定字符? [复制]

检查输入字符串是不是包含javascript中的数字

Python/FLASK - html 表单返回字符串。如何检查它是不是包含数字?

用于检查字符串是不是严格字母数字的正则表达式