标签: isnumeric

什么在.NET中使用IsNumeric()这么长时间?

今天正在与IsNumeric进行一些基准测试,并将其与以下功能进行比较:

Private Function IsNumeric(ByVal str As String) As Boolean
    If String.IsNullOrEmpty(Str) Then Return False
    Dim c As Char

    For i As Integer = 0 To Str.Length - 1
        c = Str(i)
        If Not Char.IsNumber(c) Then Return False
    Next

    Return True
End Function
Run Code Online (Sandbox Code Playgroud)

我对结果非常惊讶.使用数值时,这个数字比常规IsNumeric()快8到10倍,而使用空数字或非数字值则快1000-1500倍.

什么是IsNumeric这么久?在用上面的功能替换之前,我应该考虑一些其他问题吗?我在我的网站上的大约50个不同的地方使用IsNumeric,主要用于验证表单和查询字符串.

vb.net performance isnumeric

2
推荐指数
1
解决办法
2556
查看次数

Informix 7.3 中是否有测试字母或数字数据的内置函数?

我一直在寻找一个 SQL 函数来测试一个值是 alpha 还是数字。Informix 7.3 似乎没有任何这样的功能,但我可能错过了一些东西或者一直在寻找错误的东西。

例如,我试图测试一个电话号码字段是否只有数字并相应地处理它:

鉴于此表的电话字段类型为char(12)

id      name        phone
5164      Cheese      973-153-5149
8843      Queso       (201)8011830
8356      Formaggio   2129182943
8938      Ost         ext.21438
3852      Ser         973-15-1549
Run Code Online (Sandbox Code Playgroud)

我想做这样的事情:

SELECT  CASE    WHEN    (ISALPHA((TRIM(REPLACE((REPLACE((REPLACE((REPLACE((REPLACE(phone,'-','')),'(','')),')','')),' ','')),'.','')))))
                THEN    'has alpha chars'
                WHEN    (LENGTH((TRIM(REPLACE((REPLACE((REPLACE((REPLACE((REPLACE(phone,'-','')),'(','')),')','')),' ','')),'.','')))) NOT IN (10,11))
                THEN    'wrong length'
                WHEN    (phone IN ('',' ',NULL)))
                THEN    'phone is blank'
                ELSE    (TRIM(REPLACE((REPLACE((REPLACE((REPLACE((REPLACE(phone,'-','')),'(','')),')','')),' ','')),'.','')))
        END     phone
FROM    given_table;
Run Code Online (Sandbox Code Playgroud)

基本上,我试图从电话号码中删除任何-, (, ), ,.字符,修剪该结果,测试它的长度是否为 10 或 11 个字符,并确保数据中没有 alpha 字符。替换和修剪。(如果您觉得我将如何替换和修剪有任何问题,我也愿意在这方面提出建议。正则表达式?) …

sql informix function built-in isnumeric

2
推荐指数
1
解决办法
7902
查看次数

检查角色是否为数字的最快方法?

我遇到sqlserver的ISNUMERIC函数问题,它为','返回true

我正在解析一个邮政编码并试图查看第二个字符(应该是一个数字)是否为0,并在每种情况下做一些不同的事情.问题是我不能通过首先检查isNumeric来转换char.这是我的标量值函数的代码,用于返回第二个char位置的数字,如果不是数字,则返回-1.

@declare firstDigit int

IF ISNUMERIC(SUBSTRING(@postal,2,1) AS int) = 1
   set @firstDigit = CAST(SUBSTRING(@postal,2,1) AS int)
ELSE
   set @firstDigit = -1       

RETURN @firstdigit
Run Code Online (Sandbox Code Playgroud)

由于这在邮政编码不太有效时失败了.我只是试图找出如何检查nvarchar @postal的第二个字符是否是0-9的数字.我见过不同类型的解决方案,如使用LIKE [0-9]或使用PATINDEX等.

是否有更好/更简单的方法来做到这一点,如果不是哪种方法将是最快的?

编辑:根据Aaron Bertrand的建议添加代码

ON z.postal = 
   CASE
      WHEN CONVERT(INT, CASE WHEN SUBSTRING(v.patientPostal,2,1) LIKE '[0-9]' 
          THEN SUBSTRING(v.patientPostal, 2,1) END) = 0 then v.patientPostal
      WHEN CONVERT(INT, CASE WHEN SUBSTRING(v.patientPostal,2,1) LIKE '[0-9]' 
          THEN SUBSTRING(v.patientPostal, 2,1) END) > 0 then LEFT(v.patientPostal,3)
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server isnumeric sql-server-2008

2
推荐指数
1
解决办法
4万
查看次数

使用带有ISNUMERIC的派生表进行查询会导致转换失败(varchar为int)

这是一个示例查询:

DECLARE @table table (loc varchar(10))

INSERT INTO @table VALUES
('134a'), ('123'), ('abc'), ('124')

SELECT * 
FROM (
    SELECT * FROM @table WHERE ISNUMERIC(loc) = 1
) as a
WHERE CAST(loc as INT) BETWEEN 100 AND 200
Run Code Online (Sandbox Code Playgroud)

如果我有一些varchar值,并且我ISNUMERIC在查询中的派生表中使用它们将它们限制为数值,为什么会导致转换错误?:

将varchar值'134a'转换为数据类型int时转换失败.

有没有解决的办法?

t-sql derived-table isnumeric sql-server-2008

2
推荐指数
1
解决办法
716
查看次数

如何在vba中检查字符串是否只包含数字

我想从像这样的字符串中解析出年份信息

$8995 四月 18 2008 本田思域混合动力 $8995 (奥勒姆) 图片地图汽车和卡车 - 由车主

由于我在线检索该字符串,因此有时年份元素不在同一位置。我这样做的方法是使用 split 函数按空格分割字符串,然后检查数组的每个节点是否仅包含数字。

但是,当我使用函数 IsNumeric 时,它也返回“$8995”节点。

检查字符串是否只包含数字,没有“$”,没有“.”,而不包含其他任何内容的好方法是什么?

或者在我的情况下,是否有更好的方法来检索年份信息?

谢谢。

string excel vba isnumeric

2
推荐指数
1
解决办法
2万
查看次数

检查值是否为整数的最佳方法?Coldfusion 9

我有要测试的字段,并确保它们仅接受integers。功能很少,但是我不确定哪个是最好的。首先,我尝试了一下,isValid("integer",value)但是发现“ 1,5”将被接受为整数。因此,我尝试了一下,isNumeric(value)但是它将接受类似的值1.5。我想知道什么是检查整数的最佳方法?也许两个结合了这两个功能,例如:

<cfif isValid("integer",value) AND isNumeric(value)>
Run Code Online (Sandbox Code Playgroud)

还是有更好的方法来做到这一点?

coldfusion integer isnumeric coldfusion-9

2
推荐指数
1
解决办法
3182
查看次数

VB.NET中IsNumeric()的错误结果

我在VB.NET中有一个函数循环遍历值并尝试将其转换为十进制,如果IsNumeric为True,

Dim Value As String

If IsNumeric(Value) = True Then
    Rate = CType(Value, Decimal)  <--- bombing here
End If
Run Code Online (Sandbox Code Playgroud)

我发现当函数接收到值603E43 IsNumeric由于某种原因求值为True然后轰炸转换.IsNumeric在这种情况下为什么会这样?

vb.net isnumeric

1
推荐指数
1
解决办法
6577
查看次数

Sybase 检查值是否为数字

如何检查该值是否为数字?我尝试的是数字,但它返回一个错误,指出该函数未找到。

例子:

select *isnumeric*("abc") // returns 0 or false
select *isnumeric*("123") // returns 1 or true
Run Code Online (Sandbox Code Playgroud)

sybase stored-procedures isnumeric

1
推荐指数
1
解决办法
4634
查看次数

使用 Swift 从字符串中检测数字年份

我正在寻找一种方法来检测年份,例如 2019 年。我认为的要求是数字是连续的,有四位数字,并且不与字母或特殊字符相邻。所以我想让方法在以下每种情况下返回“2019”:

\n\n
"2019"\n"in 2019\n"Before 2019, all IOS apps were written in one of 2 ways"\n
Run Code Online (Sandbox Code Playgroud)\n\n

但将其排除在外:

\n\n
"1234z20191234\n
Run Code Online (Sandbox Code Playgroud)\n\n

有很多方法可以检测字符串中的数字,如下所示

\n\n
let newString = origString\n    .components(separatedBy:CharacterSet.decimalDigits.inverted)\n    .joined(separator: "")\n
Run Code Online (Sandbox Code Playgroud)\n\n

但他们不会提取每个数字序列来测试长度和邻接性。

\n\n

数据检测器可以尝试提取日期,但从可能的日期到起始文本中可能存在的年份似乎容易出错,例如使用以下内容:

\n\n
\xe2\x80\x9c2018-08-31 04:00:00 +0000\xe2\x80\x9d, \xe2\x80\x9cAmerica/Los_Angeles\xe2\x80\x9d, 18000.0\n
Run Code Online (Sandbox Code Playgroud)\n\n

谁能建议一种从字符串中检索数字年份的可靠方法?

\n

nsdate isnumeric ios swift

1
推荐指数
1
解决办法
574
查看次数

为什么 is_numeric() 在传递看似数字的字符串时返回 false?

我正在尝试理解 PHP 中的数字字符串。我有以下代码:

var_dump(5 * "10 abc");
var_dump(is_numeric("10 abc"));
Run Code Online (Sandbox Code Playgroud)

这给了我输出:

int(50)
bool(false)
Run Code Online (Sandbox Code Playgroud)

这让我感到困惑,因为字符串“10 abc”似乎被解释为第一个表达式中的数字字符串(因此 int(50) 输出并且没有关于使用非数字值的警告),但是当通过 is_numeric() 运行时函数它返回 false,表明它实际上不是数字字符串。

我花了一些时间查看文档来理解这种行为,但找不到任何具体的答案,有人可以帮助解释是什么导致了这种行为吗?

我知道 PHP 8.0.0 对数字字符串的含义进行了一些更改,但这是我现在正在尝试理解的 PHP 7.1.33。

php string numeric isnumeric

1
推荐指数
1
解决办法
1034
查看次数

intval还是is_numeric?PHP

我从mysql数据库中获取文本,我通过URL中的ID获取它:

site.php?id = 1等等

什么被认为是最安全的防止SQL注入和东西.这种方式是否正确:

<?php
$news_id = $_GET['news_id'];

if(!is_numeric($news_id)) die('Wrong');

//mysql_query and stuff here
?>
Run Code Online (Sandbox Code Playgroud)

或者这样:

<?php
$news_id = $_GET['news_id'];

if(!intval($news_id)) die('Wrong');

//mysql_query and stuff here
?>
Run Code Online (Sandbox Code Playgroud)

php isnumeric

0
推荐指数
1
解决办法
5692
查看次数