如何使用正则表达式判断字符串中是不是有中文
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用正则表达式判断字符串中是不是有中文相关的知识,希望对你有一定的参考价值。
中文在正则里是特定的/[\u4e00-\u9fa5]+/g这就是匹配中文的正则表达式 参考技术A \u4e00-\u9fa5匹配即有中文
如何在 SQL Server 中使用正则表达式检查字符串是不是为数字?
【中文标题】如何在 SQL Server 中使用正则表达式检查字符串是不是为数字?【英文标题】:How to check a string is numeric using Regex in SQL Server?如何在 SQL Server 中使用正则表达式检查字符串是否为数字? 【发布时间】:2019-06-28 07:03:51 【问题描述】:IsNumeric 允许以下特殊字符
`SELECT ISNUMERIC('10.50') as '10.50'
ISNUMERIC('10,50') as '10,50'
,ISNUMERIC('-') as '-'
,ISNUMERIC('+') as '+'
,ISNUMERIC('$') as '$'
,ISNUMERIC('.') as '.'
,ISNUMERIC(',') as ','
,ISNUMERIC('\') as '\'`
所以,我想使用 RegEx https://regexr.com/4gjhm 来验证我的数字,它必须只允许数字和点。
在PATINDEX
的帮助下尝试了Regex ^[0-9]+[.]0,1[0-9]*$,但没有得到预期的结果
`DECLARE @Amount As NVARCHAR(50) = '150';
SELECT CASE
WHEN @Amount LIKE '%^[0-9]+[.]0,1[0-9]*$%'
THEN 1
ELSE 0
END AS IsNumericResult`
有效示例:10、10.01、.20 无效的示例:10.50.20、10..20 等
这是否可以通过 SQL Server 2017 中的LIKE
或PATINDEX
来实现?
【问题讨论】:
%^ ...$%
对我来说似乎有点矛盾。
ISNUMERIC()
不会像您已经声明的那样帮助您,而是可以使用TRY_CAST() / TRY_CONVERT()
。无需正则表达式。
删除怎么样。和数字,然后查看 inf 字符串中是否还有任何内容...
这里的最终目标是什么?你为什么要验证字符串是那种模式?是否检测它是否会在没有错误或其他原因的情况下转换为numeric
?
问题是,SQL Server 不支持正则表达式。虽然您可以匹配具有范围 [0-9]
或设置 [01234]
的单个字符,但您不能使用 +
或 *
来匹配它们的直觉计数。即类似[0-9]+
将匹配1+
但不匹配123
。因此,您可能最好使用@Sami 答案并添加一些额外的测试以排除例如+123
或-1.5
【参考方案1】:
您可以使用 TRY_CAST()
或 TRY_CONVERT()
而无需正则表达式
SELECT CASE WHEN TRY_CAST(@Amount AS INT) IS NULL THEN 0 ELSE 1 END IsNumericResult
您可以根据需要将那里的INT
更改为数字或小数。
例如:
SELECT V Value,
CASE WHEN TRY_CAST(V AS DECIMAL(10,2)) IS NULL
THEN 0
ELSE 1
END IsNumericResult
FROM
(VALUES ('10.50'), ('+'), ('$'), ('-'), ('11')) T(V);
这里是db<>fiddle,看看它是如何工作的。
【讨论】:
这也将允许+10.5
和 -11
根据 op original question 无效。
试试 ` ('+0'), ('$0'), ('-0') ` 与ISNUMERIC
的唯一区别是('$0')
@derpirscher 1st OP 没有在他的 Q 中说明,2nd -11
不是数字???你是从哪里想到的?没有负数/正数?
对于他们给出的具体示例字符串,这具有预期的效果。 rextester.com/VJX9909
@Sami 从操作问题中引用:“验证我的数字,它必须只允许数字和点”是的 -11
是一个数字,但 OP 不想允许它,至少据我所知他的问题(以及不包含负号的初始正则表达式)以上是关于如何使用正则表达式判断字符串中是不是有中文的主要内容,如果未能解决你的问题,请参考以下文章
如何实现用正则表达式判断输个入的姓名是不是合法(中文,2-7个汉字)
C#正则表达式判断是不是是数字,是不是含有中文,是不是是数字字母组合