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.
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.
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.
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.
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.
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.
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.