2013-04-14 12 views
6

Sanırım telefon numarası diye bir özniteliğim var ve bu alana girişlerde belirli bir geçerlilik sağlamak istiyorum. Düzenli İfade, kısıtlamaları tanımlamada çok esnek olduğundan, bu amaçla düzenli ifade kullanabilir miyim?MySQL'de Veri Denetimi'ni Düzenli İfade Kullanarak Uygulamak Mümkün mü

+1

Kısa cevap: Evet yapabilirsiniz. Daha fazla içerik ekleyebilir misiniz? Girişi filtrelemek ister misiniz? Eğer öyleyse, kullanıcı örneğin ne zaman kayıt yaptığında filtrelemiyorsunuz? – HamZa

+0

@HamZaDzCyberDeV Hayır, girişte değil. Bunu veritabanında uygulamak istiyorum. Uygulama katmanında yapılabileceğini anlıyorum, tablolar oluştururken veritabanı katmanında da aynı durumun mümkün olup olmadığını merak ediyordum. –

+0

Bir tablo oluştururken, bir sütun türü belirtmeniz gerekir, "telefon numarası" türü yok. [Tetikleyiciler] 'e bakmak isteyebilirsiniz (http://dev.mysql.com/doc/refman/5.6/en/triggers.html) – HamZa

cevap

12

Evet, yapabilirsiniz. MySQL regex'i (http://dev.mysql.com/doc/refman/5.6/en/regexp.html) destekler ve veri doğrulama için MySQL CHECK kısıtlamasını desteklemediğinden bir tetikleyici kullanmalısınız (her zaman PostgreSQL'e alternatif olarak taşıyabilirsiniz :). NB! MySQL'in CHECK kısıtlama yapısına sahip olmasına rağmen, maalesef MySQL'in (şimdiye kadar 5.6) veriyi kontrol kısıtlamalarına karşı doğrulamadığı bilinmelidir. http://dev.mysql.com/doc/refman/5.6/en/create-table.html'a göre: "CHECK deyimi tüm depolama motorları tarafından çözümlenir ancak yok sayılır."

Bir sütun telefonu için denetim kısıtlamasını ekleyebilirsiniz:

CREATE TABLE data (
    phone varchar(100) 
); 

DELIMITER $$ 
CREATE TRIGGER trig_phone_check BEFORE INSERT ON data 
FOR EACH ROW 
BEGIN 
IF (NEW.phone REGEXP '^(\\+?[0-9]{1,4}-)?[0-9]{3,10}$') = 0 THEN 
    SIGNAL SQLSTATE '12345' 
    SET MESSAGE_TEXT = 'Wroooong!!!'; 
END IF; 
END$$ 
DELIMITER ; 


INSERT INTO data VALUES ('+64-221221442'); -- should be OK 
INSERT INTO data VALUES ('+64-22122 WRONG 1442'); -- will fail with the error: #1644 - Wroooong!!! 

veri doğrulama için MySQL (sizin durumunuzda veri katmanı) üzerine sadece güvenmemelisiniz Ancak. Veriler, uygulamanızın tüm düzeylerinde doğrulanmalıdır.

+0

Teşekkürler. Bu aradığım bir şey. Tüm doğrulamaların tüm katmanlarda yapılması gerektiğini anlıyorum, ancak veri katmanı için nasıl yapıldığını bilmem gerekiyordu. –