Alan Doğrulama

Varsayılan olarak bir alan kullanıcıdan herhangi bir girdiyi kabul eder. Alana bir doğrulama özelliği ilintilemek mümkündür. Böylece kullanıcının alanı terk ederken alan içerisindeki veriler onaylanması gereken şekille eşleşmezse o zaman işlem sekteye uğrayacaktır. Bazı doğrulama türleri karakter seviyesinde alana her bir karakter girilirken gerçeklenmektedir.

Alana doğrulama özelliği aşağıdaki işlevlerle ilintilenebilir.

int set_field_type
(FIELD   *alan,
/* değiştirilecek alan */
FIELDTYPE *alanozelligi,
/* ilintilenecek özellik */
...);
/* ilave parametreler */
işlev

Bir kere ayarlandıktan sonra bir alan için doğrulama türü şu şekilde sorgulanabilir:

FIELDTYPE *field_type
(FIELD *alan);
/* sorgulanacak alan */
işlev

Form sürücüsü bir alan içerisindeki veriyi sadece son kullanıcı tarafından girildiğinde doğrular.

  • Uygulama programının kendisi set_field_buffer çağırarak alan değerini değiştirdiğinde ise doğrulama gerçeklenmez.

  • Birbirine bağlı alanlar dolaylı şekilde değiştirilir: Bağlı oldukları alanın değeri değiştirilir.

Aşağıdakiler önceden tanımlanmış doğrulama türleridir. Kendiniz de yorucu ve biraz ustalık isteyen bir iş olmasına rağmen doğrulama türü tanımlayabilirsiniz.

TYPE_ALPHA

Bu alan türü alfabetik verileri kabul eder; boşluk, sayı, özel karakter olmayan (karakter girişi tarafından bu kontrol edilir). Şu şekilde ayarlanır:

int set_field_type
(FIELD *alan,
/* değiştirilecek alan */
TYPE_ALPHA,
/* ilişiklendirilecek tür */
int     genişlik);
/* alanın en fazla genişliği */
işlev

genişlik parametreleri veri için an az genişlik değerini ayarlar. Kullanıcının alandan veri girişini terk edebilmesi için en az bu ayarlanan değer genişliğinde veri girmesi gerekir. Tipik olarak bunu alan genişliği ile aynı ayarlamak isteyeceksiniz; eğer alan genişliğinden daha büyük olursa alan doğrulama sekteye uğrayacaktır. Değer olarak sıfır girilmesi ise alanın tamamlanmasını isteğe bağlı yapar.

TYPE_ALNUM

Bu alan türü alfabetik veriler ve sayılar kabul eder; boşluk ve özel karakterler (karakter girişi sırasında kontrol edilir) olmaz. Şu şekilde ayarlanır:

int set_field_type
(FIELD *alan,
/* değiştirilecek alan */
TYPE_ALNUM,
/* ilişiklendirilecek tür */
int     genişlik);
/* alanın en fazla genişliği */
işlev

genişlik parametreleri verinin en az genişliğini ayarlar. TYPE_ALPHA ile bunu alanın genişliği ile aynı yapmak isteyeceksiniz; eğer alanın genişliğinden daha büyük olursa doğrulama sekteye uğrar. Değeri sıfır olarak ayarlanırsa alanın tamamlanması isteğe bağlı hale gelir.

TYPE_ENUM

Bu tür bir ayarlama alan değerlerinin belli dizgelerden biri (örneğin, iki harfli posta kodu) olmasını zorunlu kılar. Şu şekilde ayarlanır:

int set_field_type
(FIELD *alan,
/* değiştirilecek alan */
TYPE_ENUM,
/* ilişiklendirilecek tür */
char  **değerlistesi,
/* olası değerlerin listesi */
int     buyukluk,
/* büyük küçük harf duyarlı mı? */
int     tekillik);
/* tekil olarak belirtilmeli mi? */
işlev

değerlistesi parametreleri NULL ile sonlanmış geçerli dizgeler listesini işaret etmelidir. buyukluk değişkeni dizge ile karşılaştırmayı büyük küçük harfe duyarlı hale getirir.

Kullanıcı TYPE_ENUM alanını terk ettiğinde, doğrulama işlemi önbellekteki veriyi geçerli bir girişe tamamlamaya çalışır. Tam bir dizge seçeneği girildiyse, elbette ki geçerlidir. Fakat aynı zamanda bir dizgenin öneklerini girmek te mümkündür, bu durumda kalanı tamamlanacaktır.

Öntanımlı olarak eğer böylesi bir önek girer ve bununla eşleşen birden fazla dizge listesi bulunursa, ilk eşlenen değere tamamlanır. Fakat eğer tekillik değeri mantıksal doğru ise, bu eşlenenin tekil olması zorunluluğunu getirir.

REQ_NEXT_CHOICE ve REQ_PREV_CHOICE girdi istekleri bu alanlar ile faydalı şekilde kullanılabilir.

TYPE_INTEGER

Bu alan türü bir tamsayı kabul eder. Şu şekilde ayarlanır:

int set_field_type
(FIELD *alan,
/* değiştirilecek alan */
TYPE_INTEGER,
/* ilişiklendirilecek tür */
char    adimlama,
/* sıfırlarla doldurulacak yer sayısı */
int     vmin,
/* geçerli aralık */
int     vmax);
/* geçerli aralık */
işlev

Geçerli karakterler önlerinde eksi işareti olabilen sayılardır. Menzil kontrolü çıkış anında gerçeklenir. Eğer aralığın en büyük değeri en az değerden küçük veya eşitse aralık gözardı edilir.

Eğer değer aralık kontrolünü geçerse, adimlama parametresindeki değere göre uygun sıfırlarla doldurma gerçeklenir.

TYPE_INTEGER değer önbelleği C kütüphanesindeki atoi(3) işlevi ile uygun şekilde ifade edilebilir.

TYPE_NUMERIC

Bu alan türü 10 tabanında bir sayı kabul eder. Şu şekilde ayarlanır:

int set_field_type
(FIELD *alan,
/* değiştirilecek alan */
 TYPE_NUMERIC,
/* ilişiklendirilecek tür */
 int    hassasiyet,
/* noktadan sonraki hassasiyet */
 int    vmin,
/* geçerli aralık */
 int    vmax);
/* geçerli aralık */
işlev

Geçerli karakterle önlerinde eksi işareti de olabilen sayılardır. Muhtemelen bir de ondalık belirteci bir nokta vardır. Menzil kontrolü çıkışta kontrol edilir. Eğer aralığın en büyük değeri en küçük değerden küçük veya ona eşitse aralık gözardı edilir.

Eğer değer, aralık kontrolünü geçerse hassasiyet kısmındaki değere göre uygun olarak sağ taraf sıfırlarla doldurulur.

Bir TYPE_NUMERIC değeri C kütüphanesindeki atof(3) işlevi ile uygun şekilde ifade edilebilir.

TYPE_REGEXP

Bu alan düzenli ifadeler şeklinde yazılmış verileri kabul eder. Şu şekilde ayarlanır:

int set_field_type
(FIELD *alan,
/* değiştirilecek alan */
TYPE_REGEXP,
/* ilişiklendirilecek tür */
char   *duzifd);
/* eşleşecek ifade */
işlev

Düzensiz ifade sözdizimi regcomp(3) işlevindeki ile aynıdır. Düzensiz ifadeyi kontrol etmek için kontrol, çıkış anında gerçeklenir.