检查字符串是否包含某些字符
Check if string contains certain characters
我正在尝试检查插入到员工 table 中的登录名是否以特定格式给出,即:严格给出第一个字母 - x,然后是 5 个字母和两个数字 => xlogin00.
CREATE OR REPLACE TRIGGER check_login
BEFORE INSERT OR UPDATE OF login ON employee
FOR EACH ROW
DECLARE
xlogin00 employee.login%TYPE;
prefix VARCHAR2(1);
name VARCHAR2(5);
number VARCHAR2(2);
BEGIN
xlogin00 := :new.login;
prefix := substr(xlogin00,1,1);
name := substr(xlogin00,2,5);
number := substr(xlogin00,7,2);
if(LENGTH(xlogin00) != 8) then
Raise_Application_Error (-20203, 'Error');
end if;
if(prefix != 'x') then
Raise_Application_Error (-20204, 'Error');
end if;
if NOT REGEXP_LIKE(name, '[^a-z]') then
Raise_Application_Error (-20204, 'Error');
end if;
if NOT REGEXP_LIKE(number, '[^0-9]') then
Raise_Application_Error (-20204, 'Error');
end if;
END;
似乎在我的代码中唯一有效的是 if(prefix != 'x')
。其他东西根本不起作用。我做错了什么?
您只需一张支票即可完成所有这些操作:
IF NOT REGEXP_LIKE(:new.login, '^x[a-z]{5}\d\d$') THEN
Raise_Application_Error (-20204, 'Error');
请注意,您还颠倒了布尔逻辑:在最后两个测试中,您都有双重否定(IF
中的 NOT
和正则表达式中的 [^...]
)。
请注意,在提议的正则表达式中,需要 ^
和 $
来确保匹配的是完整的登录值,而不仅仅是子字符串。
我正在尝试检查插入到员工 table 中的登录名是否以特定格式给出,即:严格给出第一个字母 - x,然后是 5 个字母和两个数字 => xlogin00.
CREATE OR REPLACE TRIGGER check_login
BEFORE INSERT OR UPDATE OF login ON employee
FOR EACH ROW
DECLARE
xlogin00 employee.login%TYPE;
prefix VARCHAR2(1);
name VARCHAR2(5);
number VARCHAR2(2);
BEGIN
xlogin00 := :new.login;
prefix := substr(xlogin00,1,1);
name := substr(xlogin00,2,5);
number := substr(xlogin00,7,2);
if(LENGTH(xlogin00) != 8) then
Raise_Application_Error (-20203, 'Error');
end if;
if(prefix != 'x') then
Raise_Application_Error (-20204, 'Error');
end if;
if NOT REGEXP_LIKE(name, '[^a-z]') then
Raise_Application_Error (-20204, 'Error');
end if;
if NOT REGEXP_LIKE(number, '[^0-9]') then
Raise_Application_Error (-20204, 'Error');
end if;
END;
似乎在我的代码中唯一有效的是 if(prefix != 'x')
。其他东西根本不起作用。我做错了什么?
您只需一张支票即可完成所有这些操作:
IF NOT REGEXP_LIKE(:new.login, '^x[a-z]{5}\d\d$') THEN
Raise_Application_Error (-20204, 'Error');
请注意,您还颠倒了布尔逻辑:在最后两个测试中,您都有双重否定(IF
中的 NOT
和正则表达式中的 [^...]
)。
请注意,在提议的正则表达式中,需要 ^
和 $
来确保匹配的是完整的登录值,而不仅仅是子字符串。