Email artık hayatın vazgeçilmezlerinden biri oldu. Birçok uygulama en basitinden üye kayıt için email doğrulaması gerektiriyor. Bu da uygulama geliştiricilerin bu adresler ile olan ilişkisini daha bir arttırdı.
Genelde business layer tarafında yapılan doğrulama işlemlerini data layer tarafına da kaydırmak yapılagelen bir durumdur. NULL olmama gibi kontroller veritabanı düzeyinde sıkça yapılmasına rağmen daha karmaşık kısıtlar için veritabanını kullanmaz birçok geliştirici.
Oracle, kendi içinde barındırdığı regular expression desteği ile artık birçok karmaşık text tabanlı işlemi yapılabilmektedir. Bunun nasıl yapıldığını aşağıdaki örnekte basitçe anlatmaya çalıştım.
Email kontrolü için yazılan doğrulama, oldukça basittir. Sadece @ ve . karakterlerinden önce ve sonra bir veya birden fazla karakterin gelmesi gerektiğini belirtmektedir.
Connected to Oracle Database 10g Express Edition Release 10.2.0.1.0
Connected as SYS
SQL>
SQL> create table email_test( id number, email varchar2(128));
Table created
SQL> alter table email_test add constraint email_validate_ck check( regexp_like( email, '^.+[@].+[\.].+$' ));
Table altered
SQL> INSERT INTO email_test VALUES(1, 'waa@aaa.com.tr');
1 row inserted
SQL> INSERT INTO email_test VALUES(1, 'waaaaa.com');
INSERT INTO email_test VALUES(1, 'waaaaa.com')
ORA-02290: check constraint (SYS.EMAIL_VALIDATE_CK) violated
SQL>
Regular Expression, Oracle'ye 10G ile gelen bir özelliktir.
Düz PL/SQL ile ise
Çıktı ise
Genelde business layer tarafında yapılan doğrulama işlemlerini data layer tarafına da kaydırmak yapılagelen bir durumdur. NULL olmama gibi kontroller veritabanı düzeyinde sıkça yapılmasına rağmen daha karmaşık kısıtlar için veritabanını kullanmaz birçok geliştirici.
Oracle, kendi içinde barındırdığı regular expression desteği ile artık birçok karmaşık text tabanlı işlemi yapılabilmektedir. Bunun nasıl yapıldığını aşağıdaki örnekte basitçe anlatmaya çalıştım.
Email kontrolü için yazılan doğrulama, oldukça basittir. Sadece @ ve . karakterlerinden önce ve sonra bir veya birden fazla karakterin gelmesi gerektiğini belirtmektedir.
Connected to Oracle Database 10g Express Edition Release 10.2.0.1.0
Connected as SYS
SQL>
SQL> create table email_test( id number, email varchar2(128));
Table created
SQL> alter table email_test add constraint email_validate_ck check( regexp_like( email, '^.+[@].+[\.].+$' ));
Table altered
SQL> INSERT INTO email_test VALUES(1, 'waa@aaa.com.tr');
1 row inserted
SQL> INSERT INTO email_test VALUES(1, 'waaaaa.com');
INSERT INTO email_test VALUES(1, 'waaaaa.com')
ORA-02290: check constraint (SYS.EMAIL_VALIDATE_CK) violated
SQL>
Regular Expression, Oracle'ye 10G ile gelen bir özelliktir.
Düz PL/SQL ile ise
DECLARE
email VARCHAR2(32);
i NUMBER;
k NUMBER;
part1 VARCHAR2(32);
part2 VARCHAR2(32);
BEGIN
email := 'mennan.mennan.men.na';
dbms_output.put_line('Email is ' || email);
i := instr(email, '@');
part1 := substr(email, 1, i - 1);
email := substr(email, i + 1);
k := instr(email, '.', 1);
part2 := substr(email, 1, k - 1);
email := substr(email, k + 1);
IF i * k = 0 THEN
dbms_output.put_line('Invalid -->> (@) or (.) not found');
ELSIF nvl(length(part1), 0) * nvl(length(part2), 0) *
nvl(length(email), 0) = 0 THEN
dbms_output.put_line('Invalid -->> Length problem');
ELSE
dbms_output.put_line('Email suppose to be valid...');
END IF;
END;
Çıktı ise
Email is mennan@mennan.men.na Email suppose to be valid... Email is mennan@.men.na Invalid -->> Length problem Email is mennan.mennan.men.na Invalid -->> (@) or (.) not found
No comments:
Post a Comment