Mysql에서 이메일 주소 확인
이 쿼리는 잘못된 전자 메일 주소 형식을 한 테이블에 캡처하는 mysql 보기를 만듭니다.그래서 만약 행이 삽입된다면, 그것은rtrrg.com
이메일로 보기에 기록됩니다.제 질문은 뷰 트랙을 둘 이상의 테이블로 만드는 방법입니다.두번째 테이블.
더 SQL
CREATE VIEW `invalid_emails` AS
select `table_with_email_column`.`email` AS `invalidemail`
from `table_with_email_column`
where ((locate(_latin1'', ltrim(rtrim(`table_with_email_column`.`email`))) <> 0)
or (left(ltrim(`table_with_email_column`.`email`), 1) = _latin1'@')
or (right(rtrim(`table_with_email_column`.`email`), 1) = _latin1'.')
or ((locate(_latin1'.', `table_with_email_column`.`email`,locate(_latin1'@', `table_with_email_column`.`email`)) - locate(_latin1'@', `table_with_email_column`.`email`)) <= 1)
or ((length(ltrim(rtrim(`table_with_email_column`.`email`))) - length(replace(ltrim(rtrim(`table_with_email_column`.`email`)), _latin1'@', _latin1''))) <> 1)
or (locate(_latin1'.', reverse(ltrim(rtrim(`table_with_email_column`.`email`)))) < 3)
or (locate(_latin1'.@', `table_with_email_column`.`email`) <> 0)
or (locate(_latin1'..', `table_with_email_column`.`email`) <> 0));
퓨어를 사용하시면 됩니다.SELECT
이메일 주소 확인하기:
SELECT * FROM `users` WHERE `email` NOT REGEXP '^[^@]+@[^@]+\.[^@]{2,}$';
이제 여러 테이블을 추적하는 질문에 쉼표로 구분된 테이블 이름을 사용할 수 있죠?
SELECT * FROM `users`, `customers`, `clients`
WHERE `email` NOT REGEXP "^[a-zA-Z0-9][a-zA-Z0-9.!#$%&'*+-/=?^_`{|}~]*?[a-zA-Z0-9._-]?@[a-zA-Z0-9][a-zA-Z0-9._-]*?[a-zA-Z0-9]?\\.[a-zA-Z]{2,63}$";
올바른 전자 메일 유효성 검사를 위해 다음과 같이 이 regex를 사용할 수 있습니다.
SELECT
*
FROM
`school`
WHERE
`email` NOT REGEXP '^[a-zA-Z0-9][a-zA-Z0-9._-]*[a-zA-Z0-9._-]@[a-zA-Z0-9][a-zA-Z0-9._-]*[a-zA-Z0-9]\\.[a-zA-Z]{2,63}$';
간단하죠.SELECT
문장은 충분합니다. 예를 들어 다음과 같습니다.
SELECT * FROM user WHERE email NOT
REGEXP '^[a-zA-Z0-9][+a-zA-Z0-9._-]*@[a-zA-Z0-9][a-zA-Z0-9._-]*[a-zA-Z0-9]*\\.[a-zA-Z]{2,4}$'
이 쿼리는 다음과 같은 Gmail 주소를 처리합니다.+
호스트가 단일 문자인 경우 서명 및 주소를 입력합니다.
당신은 a를 사용할 수 있습니다.UNION
에서VIEW
하지만 당신은 모든 것을 반복해야 합니다.WHERE
중복 코드를 제공하는 문장입니다.그래서 당신은 조력자가 될 것입니다.VIEW
그래서 당신은UNION
그 다음에 적용합니다.WHERE
절
데모: SQL Fiddle 데모.
이는 SQL에 어떻게든 적용됩니다(검증되지 않음).
CREATE VIEW `invalid_emails_helper` AS
select `table_with_email_column`.`email` AS `invalidemail`
from `table_with_email_column`
union
select `table_with_email_column`.`email`
from `second_table_with_email_column`
CREATE VIEW `invalid_emails` AS
select `invalidemail` as `email`
from `invalid_emails_helper` as `table_with_email_column`
where ((locate(_latin1'', ltrim(rtrim(`table_with_email_column`.`email`))) <> 0)
or (left(ltrim(`table_with_email_column`.`email`), 1) = _latin1'@')
or (right(rtrim(`table_with_email_column`.`email`), 1) = _latin1'.')
or ((locate(_latin1'.', `table_with_email_column`.`email`,locate(_latin1'@', `table_with_email_column`.`email`)) - locate(_latin1'@', `table_with_email_column`.`email`)) <= 1)
or ((length(ltrim(rtrim(`table_with_email_column`.`email`))) - length(replace(ltrim(rtrim(`table_with_email_column`.`email`)), _latin1'@', _latin1''))) <> 1)
or (locate(_latin1'.', reverse(ltrim(rtrim(`table_with_email_column`.`email`)))) < 3)
or (locate(_latin1'.@', `table_with_email_column`.`email`) <> 0)
or (locate(_latin1'..', `table_with_email_column`.`email`) <> 0));
그리고 네, 이메일 주소를 확인하기 위한 쿼리는regex
인터넷 어디에서나 쉽게 찾을 수 있듯이 인터넷은 그것을 더욱 단순화시킵니다.
SELECT
*
FROM
users
WHERE
email NOT REGEXP ‘ ^[ a - zA - Z0 - 9 ][ a - zA - Z0 - 9._ -]*[ a - zA - Z0 - 9 ]@[ a - zA - Z0 - 9 ][ a - zA - Z0 - 9._ -]*[ a - zA - Z0 - 9 ]\.[ a - zA - Z ]{ 2,
63 } $’
select EmailAddress from FindInvalidEmailAddressDemo
-> where EmailAddress NOT LIKE '%_@_%._%';
MySQL 9를 사용하면 이메일 주소 열에 저장된 모든 데이터의 유효성을 검사할 수 있는 검사 제약 조건을 만들 수 있습니다.여기 있습니다.ALTER TABLE
문:
ALTER TABLE `user`
ADD CONSTRAINT `user.email_validation`
CHECK (`email` REGEXP "^[a-zA-Z0-9][a-zA-Z0-9.!#$%&'*+-/=?^_`{|}~]*?[a-zA-Z0-9._-]?@[a-zA-Z0-9][a-zA-Z0-9._-]*?[a-zA-Z0-9]?\\.[a-zA-Z]{2,63}$");
잘못된 이메일을 찾기 위한 내 해결책:
SELECT * FROM `tbl_email` WHERE `email` NOT REGEXP '^[a-zA-Z0-9]+[a-zA-Z0-9._-]*@[a-zA-Z0-9]+[a-zA-Z0-9._-]*\.[a-zA-Z0-9]{2,63}$';
일단 reexped만 제안되면 모든 오류를 고려하지 않고, 저는 제 기능으로 완성합니다.댓글을 코드로 봅니다.
DELIMITER $$
CREATE OR REPLACE function fn_DOC_Validar_EMail ( pStrEMail VARCHAR(200) )
RETURNS BIT
BEGIN
declare lIntValid bit;
set lIntValid = 0;
SELECT 1 into lIntValid
Where pStrEMail REGEXP '^[a-zA-Z0-9][a-zA-Z0-9.!#$%&\'*+-/=?^_`{|}~]*?[a-zA-Z0-9._-]?@[a-zA-Z0-9][a-zA-Z0-9._-]*?[a-zA-Z0-9]?\\.[a-zA-Z]{2,63}$'
and pStrEMail not like '%[^a-z0-9@._-]%' -- not allow characters differents: a-z 0-9 @ . _ -
and pStrEMail not like '%@%@%' -- not allow two @
and pStrEMail not like '%.@%' -- not allow .@
and pStrEMail not like '%..%' -- not allow ..
and pStrEMail not like '%.' -- not allow . (dot) at end
and pStrEMail like '%_@_%_.__%' -- not allow short, i.e., a@a.com
and pStrEMail not LIKE '%^%' -- not allow character ^
and pStrEMail not LIKE '%\%%' -- not allow character %
;
return lIntValid ;
END;
$$
아래 샘플을 사용하여 기능을 테스트합니다.
Select Sequencial, email, fn_DOC_Validar_EMail(EMail) from TEMP_Emails;
Create table TEMP_Emails
(
Sequencial int,
Email varchar(200)
);
-- invalids
insert into TEMP_Emails values (1, '@teste.com'); -- Start with @
insert into TEMP_Emails values (2, 'josue@teste'); -- with out domain
insert into TEMP_Emails values (3, 'jo ue@teste'); -- espace
insert into TEMP_Emails values (4, 'jo"ue@teste'); -- quotes
insert into TEMP_Emails values (5, 'jo$ue@teste'); -- special Character
insert into TEMP_Emails values (6, 'josue^teste@teste.com'); -- special Character
insert into TEMP_Emails values (7, 'josue]teste@teste.com'); -- special Character
insert into TEMP_Emails values (8, 'josue%teste@teste.com'); -- special Character
insert into TEMP_Emails values (9, 'josue@.teste.com'); -- @.
insert into TEMP_Emails values (10, 'josue@@teste.com'); -- 2 x @
insert into TEMP_Emails values (11, 'josue@teste@teste.com'); -- 2 x @
insert into TEMP_Emails values (12, 'josue.@teste.com'); -- .@
insert into TEMP_Emails values (13, 'josue@teste..com'); -- ..
insert into TEMP_Emails values (14, 'josue@teste.ad.'); -- . at final
--OK: Valids
insert into TEMP_Emails values (101, 'josue@teste.com.br');
insert into TEMP_Emails values (102, 'jo.sue@teste.com.br');
insert into TEMP_Emails values (103, 'josue@teste.com');
insert into TEMP_Emails values (104, 'josue.teste@teste.com');
insert into TEMP_Emails values (105, 'josue_teste@teste.com');
insert into TEMP_Emails values (106, 'josue-teste@teste.com');
insert into TEMP_Emails values (107, 'josue@dba-pro.com');
insert into TEMP_Emails values (108, 'josue@dba.pro.com');
insert into TEMP_Emails values (109, 'josue2017@teste.com');
insert into TEMP_Emails values (110, '2022@2022.com');
Select Sequencial, email, fn_DOC_Validar_EMail(EMail) from TEMP_Emails;
언급URL : https://stackoverflow.com/questions/12759596/validate-email-addresses-in-mysql
'programing' 카테고리의 다른 글
자바스크립트에서 객체를 만드는 데 가장 좋은 방법은 무엇입니까?객체 속성 앞에 var가 필요합니까? (0) | 2023.09.27 |
---|---|
데이터베이스에서 상위 테이블과 하위 테이블이란? (0) | 2023.09.27 |
%를(를) 사용할 수 없음:자르기Remainer를 대신 사용합니다."는 다음을 의미합니까? (0) | 2023.09.27 |
MySQL 쿼리에서 SELECT로 INSERT INTO를 수행할 때 정적 값을 추가하는 방법은 무엇입니까? (0) | 2023.09.27 |
EXPRESON의 "Using index"와 "Using were; Using index"의 차이점은 무엇입니까? (0) | 2023.09.27 |