Php MySQL数据库中的正则表达式不是';行不通
我在MySQL服务器中的正则表达式检查似乎不起作用,或者我犯了一个非常明显的错误(如果是的话,很抱歉,我就是无法发现) 触发器:触发器检查成员 事件:插入 表:tbl_成员 声明: 开始 如果(NEW.member_email REGEXP'^(\w+@\w+.\w+$)=FALSE,则 信号状态“12345” 设置消息_TEXT='无效电子邮件'; 如果结束; 结束 时间:之前 已创建:NULL sql模式:无引擎替换 这就是我的触发器,它突出显示了我的正则表达式。这是我的证明(可能是错误的),它适用于我想要输入的数据 我知道这是一个糟糕的正则表达式,我刚开始学习它,想测试基本的东西,就像我知道如果有像xxx这样的电子邮件。yyy@foo.bar它不会有同样的结果 这是我产生错误的测试数据Php MySQL数据库中的正则表达式不是';行不通,php,mysql,regex,triggers,xampp,Php,Mysql,Regex,Triggers,Xampp,我在MySQL服务器中的正则表达式检查似乎不起作用,或者我犯了一个非常明显的错误(如果是的话,很抱歉,我就是无法发现) 触发器:触发器检查成员 事件:插入 表:tbl_成员 声明: 开始 如果(NEW.member_email REGEXP'^(\w+@\w+.\w+$)=FALSE,则 信号状态“12345” 设置消息_TEXT='无效电子邮件'; 如果结束; 结束 时间:之前 已创建:NULL sql模式:无引擎替换 这就是我的触发器,它突出显示了我的正则表达式。这是我的证明(可能是错误的
INSERT INTO tbl_members VALUES ('jeff', 'password', 'hardy', 'jeff', 'matt', 'you@you.you');
^不是真正的代码,错误消息
<?php
//Variables
$database_name;
$dbc;
$table_create_queries;
$triggers;
//Initialization
$database_name = 'PolySoft';
$dbc = new mysqli('localhost', 'root', null);
$table_create_queries = array
(
//Members Table
'tbl_members' => 'CREATE TABLE tbl_members(member_username varchar(40) NOT NULL,
member_password varchar(60) NOT NULL,
member_surname varchar(40) NOT NULL,
member_forename varchar(40) NOT NULL,
member_othernames varchar(40),
member_email varchar(254),
UNIQUE(member_email),
PRIMARY KEY(member_username));'
,
//Addresses Table
'tbl_addresses' => 'CREATE TABLE tbl_addresses(address_postcode varchar(10) NOT NULL,
address_country varchar(255) NOT NULL,
address_county varchar(255),
address_city varchar(255) NOT NULL,
address_town varchar(255),
address_street varchar(255) NOT NULL,
address_house_name_or_number varchar(255) NOT NULL,
PRIMARY KEY(address_postcode));'
);
$triggers = array
(
'check_members' =>'CREATE TRIGGER trig_check_memebers
BEFORE INSERT ON tbl_members
FOR EACH ROW
BEGIN
IF (NEW.member_email REGEXP \'^(\\\\w+@\\\\w+\\\\.\\\\w+)$\') = FALSE THEN
SIGNAL SQLSTATE \'12345\'
SET MESSAGE_TEXT = \'invalid email\';
END IF;
END;'
);
$dbc->query("DROP DATABASE IF EXISTS $database_name");
$dbc->query("CREATE DATABASE $database_name");
$dbc->close();
$dbc = new mysqli('localhost', 'root', null, $database_name);
foreach($table_create_queries as $tbl => $query)
{
$dbc->query($query);
}
foreach($triggers as $trig => $query)
{
$dbc->query($query);
}
$dbc->query("INSERT INTO tbl_members VALUES ('jeff', 'password', 'hardy', 'jeff', 'matt', 'you@you.you')");
//$dbc->query();
$dbc->close();
?>
将正则表达式更改为:
^[A-Za-z_]+@[A-Za-z_]+\\.[A-Za-z_]+$
我已经把你的照片整理好了。现在我已经这样做了,如果你能把第一、第三和第四个替换为它们的文本等价物,那就太好了!regex tester的图像非常有用,但是所有其他的图像都可以从中复制和粘贴,这在图像中是不可能的(您会发现这是使用图像的常见反应-人们会要求您提供文本版本-代码、错误消息等)。(除了那个反馈,这是一个很好的问题。我想你会很快得到一个详细的答案。)如果(NEW.member_email REGEXP'^[:word:][+@[:word:][+\.:word:][+$”)=FALSE则是最终正则表达式的样子,它也不起作用。我需要额外的“\”还是像我假设的那样逃离“\”@Fat\u Llama我不信任mysql中的\w
,不确定它的引擎是否支持它。这就是为什么我放第二个选项。@Fat\u Llama顺便说一句,试试changin[:word://code>但是[:alnum:]
@Fat\u Llama我已经使用了普通的mysql正则表达式,但是对于php代码,您必须将\\.
更改为\\\.
^[A-Za-z_]+@[A-Za-z_]+\\.[A-Za-z_]+$