首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用不适用于换行符的正则表达式触发验证

使用不适用于换行符的正则表达式触发验证
EN

Stack Overflow用户
提问于 2019-01-26 15:08:23
回答 2查看 77关注 0票数 2

我正在尝试使用mysql触发器验证插入。col1中的插入应该是数字的。首先将col1定义为整数并不是一个选项。但是,如果结尾有换行符,则验证失败。

这是桌子

代码语言:javascript
复制
CREATE TABLE testTable(col1 varchar(20), col2 int);

在这里,触发器验证器

代码语言:javascript
复制
DELIMITER $$
CREATE TRIGGER check_numeric BEFORE INSERT ON testTable
FOR EACH ROW
BEGIN
IF (NEW.col1 REGEXP '^[0-9]+$') = 0 THEN
SIGNAL SQLSTATE '12345' SET MESSAGE_TEXT='non-numerical';
END IF;
END $$

如果我试图在末尾插入一个包含换行符的字符串,这将通过验证,尽管在我看来它不应该是数字字符。

代码语言:javascript
复制
INSERT INTO testTable values('323423\n', 12);

有人知道我在这里错过了什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-26 15:29:44

另一个选项是搜索任何不是数字的内容,如果任何字符不是数字,这将返回1:REGEXP '[^[:digit:]]'

所以IF条款应该是

代码语言:javascript
复制
IF (NEW.col1 REGEXP '[^[:digit:]]') = 1 THEN ...

当然,如果不想使用字符类,则可以编写[^0-9]而不是[:digit:]

票数 1
EN

Stack Overflow用户

发布于 2019-01-26 15:16:13

你能这样办理登机手续吗?

代码语言:javascript
复制
IF NEW.col1 REGEXP '^[0-9]+$' AND NEW.col1 NOT REGEXP '\n' THEN
代码语言:javascript
复制
with w as 
(select '1234' c1 from dual union all
 select '1234\n' from dual)
select * from w 
where c1 REGEXP '^[0-9]+$' AND c1 NOT REGEXP "\n";

结果:1234

工频

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54379629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档