الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

التحقق من المدخلات

بدأه kiubo في 17 مايو 2012 · 10 رد · 898 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

لدي مدخلات تتكون من ثلاثه وهم كالتالي

اسم اول اسم ثاني ورقم السري

هذة الصورة للتوضيح فقط

post-250413-085124800 1337208530_thumb.p

وكتب كود وطريقة كتابتي جداُ معقده وبالاضافه لم يتحقق الملطوب بكل سلاسه

بحث كثيراً كثيراُ بالمحرك البحث لكن لم اجد مااريده وقرأت ان مثل هذة الامور تقوم بها بعض الادوات الخاصه بهذة الموضوع" التحقق" ,,

الاسم الاول يحتوي على حروف فقط ولايقبل اي قيم عدديه ولا قيمة فارغه وان يكون اقل من 5

وكذالك الاسم الثاني

واخيراُ الرقم السري ان يكون مساوي لل 8 او اقل لا مشكلة في ذالك

الامر الصعب الي واجهتة اني لا استطيع كتابة كود متناغم مع بعض وبشكل سلس

مع الرغم اني قمته بتطبيقة بمثال صغير ونجح ولكن عندما اريد تطبيقة بالمشروع الفعلي لم ينجح الامر كما اريد .. الموضوع معقد بالنسبة لي والمشكلة ان امر التحقق من المدخلات من الاساسيات التي يجب مراعاتها ولا استطيع ان اتغاضى عنها واقدمها بطريقة غير جيده ,,

سأرفق المثال الذي قمت بعملة

والكودالاصلي الذي به المشكلة المشكلة هي قبول القيم العددية في حقل الاسم

        AdminCombobox = !buttonGroup1.isSelected(Admin_RadioButton.getModel());
        SWCombobox = !buttonGroup1.isSelected(Social_RadioButton.getModel());
        System.out.print(!buttonGroup1.isSelected(Admin_RadioButton.getModel()));
        studentId = userID_Field.getText();
        studentFirst = firstNameUser_TextField.getText();
        studentLast = lasttNameUser_TextField.getText();

        studentPass = password_Field1.getText();
 if ( studentFirst.isEmpty() || studentLast.isEmpty() || studentPass.isEmpty()
 || AdminCombobox || SWCombobox) {//work fine

 if (studentFirst.isEmpty()) {//work fine
 JOptionPane.showMessageDialog(this, "First name field is empty!!", "ERROR", JOptionPane.ERROR_MESSAGE);
    firstNameUser_TextField.setText("");
         }
 if (studentLast.isEmpty()) {//work fine
 JOptionPane.showMessageDialog(this, "Last name field is empty!!", "ERROR", JOptionPane.ERROR_MESSAGE);
lasttNameUser_TextField.setText("");
         }
 if (studentPass.isEmpty()) {//work fine
 JOptionPane.showMessageDialog(this, "Password field is empty!!", "ERROR", JOptionPane.ERROR_MESSAGE);
 password_Field1.setText("");
             }
  if ((AdminCombobox) && (SWCombobox)) {//work fine
  JOptionPane.showMessageDialog(this, "you did not choses a type of user!!", "ERROR", JOptionPane.ERROR_MESSAGE);
             }
  if (studentPass.length() != 8 && !studentPass.isEmpty()) {

 JOptionPane.showMessageDialog(this, "length of password is not correct it must to be 8 digits or characters !!", "ERROR", JOptionPane.ERROR_MESSAGE);
                 userID_Field.setText("");

  }

  else{if (studentPass.length() == 8){
                if (!containsOnlyNumbers(studentFirst)&&!containsOnlyNumbers(studentLast))//error

//addUser();//to add new user
 JOptionPane.showMessageDialog(this, "length is 8 and correct character for name OK  !!", "ERROR", JOptionPane.ERROR_MESSAGE);

                }else{
  JOptionPane.showMessageDialog(this, "First name or last name is  must to be character!!", "ERROR", JOptionPane.ERROR_MESSAGE);
                 userID_Field.setText("");
  }
 }      }     




            // addUser();

 }

  public boolean containsOnlyNumbers(String str) {

        //It can't contain only numbers if it's null or empty...


        for (int i = 0; i < str.length(); i++) {

            //If we find a non-digit character we return false.
            if (!Character.isDigit(str.charAt(i)))
                return false;
        }

        return true;
    }

example_vaild.zip

ملاحظة ال UserID ليس لها دخل بالموضوع التحقق سأجعلها مزوده من النظام من نفسه ..

المرفقات
tty.png

كن مثل طابع البريد ، التصق بهدفك...حتى تصل الى هناك!

#2

السلام عليكم

يمكنك استخدام دالة matches

مثال:

للتحقق من المدخل حروف صغيرة فقط

txt.getText().matches("[a-z]*"))

طبعا يرجع قيمة boolean

للتحقق من المدخل اول حرف كبير والباقي صغير

txt.getText().matches("[A-Z][a-z]*"))
1
#3

تحتاج ان تستخدم regular expression

ستجد فى المنتدى مواضيع كثيره تتحدث عنه

وهذه امثله

/index.php?showtopic=215286&st=0&p=1066139&hl=

/index.php?showtopic=207743&st=0&p=1029987&hl

/index.php?showtopic=247397&st=0&p=1225315&hl

هذه الداله هى الحل الامثل لما تريد عمله وهى قويه جدا فى ما تريد

تم تعديل هذه المشاركة بواسطة mohamed salama في 17 مايو 2012 في 11:00

2
73b14eadba.gif

الحمدلله والصلاة والسلام على رسول الله وعلى آله وصحبه أجمعين

لكل مبتدئى البرمجه برمجه بلغه السى شارب

تنصيب ويندوز 8 على vmware

#4

السلام عليكم kiubo كاضافه الى حلول الاخوه ، يمكنك استخدام InputVerifier كما يمكنك استخدام JFormattedTextField

بالتوفيق

تم تعديل هذه المشاركة بواسطة mental-driller في 17 مايو 2012 في 13:38

1

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#5

ال pattern هذا فعلاً مااريده شكراً لكم ..والمواضيع المرفقه لم اراها من قبل

كنت سابق اضن ال pattern انها خاصه فقط ب ادخال ارقام صندوق البريد وغيره

سأضع الكود بعد التعديل بأذن الله ...

لكن يااخ mental-driller

ممكن تعطيني لمحه عن InputVerifier

هل تقصد وجود علامه توضع بجانب الحقول كاعلامة صح.. اذا كانت ماتقصده .. سبق وان رأيتها لكن شعرت بأنها متقدمه من خلال قرائتي للكود

تم تعديل هذه المشاركة بواسطة kiubo في 17 مايو 2012 في 13:46

كن مثل طابع البريد ، التصق بهدفك...حتى تصل الى هناك!

#6

بالنسبة للJFormattedTextField فاعتقد ان موقع اوراكل هو الultimate authority

How to use JFormattedTextFields

اما بالنسبة للInputVerifier فعليكي ان تقومي بتعريف InputVerifier خاص بكي ، لا ادري اذا كان يوجد هناك Adapters تقوم بالتحقق من المدخل اذا كان رقم ام لا ، ولكن مسألة التعقيد بيدك انتي من ان يكون بغاية السهوله الى ان يكون بغاية التعقيد

بالتوفيق

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#7

حسناً كتبت هذا الكود

لكن المشكلة تكمن في حقول الاسماء تقبل قيم عددية

انشأت اثنين من methods واحده للرقم السري والاخرى للاسماء

الرقم السري تعمل بشكل جيد ام الاخرى لا

public boolean matchName(String name){//2012-5-16


    boolean findNum;
    if(name.length()<=10&&name.length()>2){// this only way to accept a 3 values 

     Pattern p = Pattern.compile("[a-zA-Z]");
    Matcher m = p.matcher(name);
  findNum = m.find();
return findNum;
  }else{

    findNum = false;
    JOptionPane.showMessageDialog(this,"length of First name or last name is invaild !!" +"\nit must be less than or equal 10 characters only","WARNING",JOptionPane.WARNING_MESSAGE);
    }
  return findNum;
}

الخاصه بالرقم السري

public boolean matchPassworg(String pass){//2012-5-16


    boolean findpass;
    if(pass.length()<=8&&pass.length()>3){// this only way to accept a 4 values 
    Pattern patternNum = Pattern.compile("[0-9a-zA-Z]");
    Matcher m1 = patternNum.matcher(pass);

  findpass = m1.find();
  }else{

    findpass = false;
    JOptionPane.showMessageDialog(this,"length of password is invaild !!" +"\nit must be less than or equal 8 digits or characters","WARNING",JOptionPane.WARNING_MESSAGE);
    }
  return findpass;
}

وهذا ال method لخاصه بالحقول الفارغة

      public boolean isEmptyFields() {

        boolean com = true;
        AdminCombobox = !buttonGroup1.isSelected(Admin_RadioButton.getModel());
        SWCombobox = !buttonGroup1.isSelected(Social_RadioButton.getModel());
        System.out.print(!buttonGroup1.isSelected(Admin_RadioButton.getModel()));
        studentId = userID_Field.getText();
        studentFirst = firstNameUser_TextField.getText();
        studentLast = lasttNameUser_TextField.getText();

        studentPass = password_Field1.getText();
        if ( studentFirst.isEmpty() || studentLast.isEmpty() || studentPass.isEmpty()
                || AdminCombobox || SWCombobox) {

            if (studentFirst.isEmpty()) {
                JOptionPane.showMessageDialog(this, "First name field is empty!!", "ERROR", JOptionPane.ERROR_MESSAGE);
                firstNameUser_TextField.setText("");
                com = false;
            }
            if (studentLast.isEmpty()) {
                JOptionPane.showMessageDialog(this, "Last name field is empty!!", "ERROR", JOptionPane.ERROR_MESSAGE);
                lasttNameUser_TextField.setText("");
                com = false;
            }
            if (studentPass.isEmpty()) {
                JOptionPane.showMessageDialog(this, "Password field is empty!!", "ERROR", JOptionPane.ERROR_MESSAGE);
                password_Field1.setText("");
                com = false;
            }
            if ((AdminCombobox) && (SWCombobox)) {
                JOptionPane.showMessageDialog(this, "you did not choses a type of user!!", "ERROR", JOptionPane.ERROR_MESSAGE);
                com = false;
            }

        }

        return com;
    }

وهنا عند الضغط على زر الحفظ

    private void save_ButtonActionPerformed(java.awt.event.ActionEvent evt) {                                            

 if(isEmptyFields()){


   if(matchName(studentFirst)&&matchName(studentLast))
   {
   //forPassword
        JOptionPane.showMessageDialog(this, "correctName", "ERROR", JOptionPane.ERROR_MESSAGE);   
            // addUser();
   }    
  if(matchPassworg(studentPass))
     {

    JOptionPane.showMessageDialog(this, "correctPasswor", "ERROR", JOptionPane.ERROR_MESSAGE);

     }
 }
 }

اقتباس

بالنسبة للJFormattedTextField فاعتقد ان موقع اوراكل هو الultimate authority

How to use JFormattedTextFields

اما بالنسبة للInputVerifier فعليكي ان تقومي بتعريف InputVerifier خاص بكي ، لا ادري اذا كان يوجد هناك Adapters تقوم بالتحقق من المدخل اذا كان رقم ام لا ، ولكن مسألة التعقيد بيدك انتي من ان يكون بغاية السهوله الى ان يكون بغاية التعقيد

بالتوفيق

سبق وان قرأت عن الJFormattedTextFields ..لكنها تحتاج الى وقت الى فهمها واستيعابها وانا لايوجد لدي وقت الكافى في نهاية هذا الاسبوع بأذن الله سأناقش مشروعي ..

والوقت لايكفي ابداً.. :happy:

اريد التحقق بصورة بسيطه مستوفية للمطلوب...

تم تعديل هذه المشاركة بواسطة kiubo في 17 مايو 2012 في 14:33

كن مثل طابع البريد ، التصق بهدفك...حتى تصل الى هناك!

#8

انا ضعت بين مفاهيم ال regular expression

:S

مثلا هنا اريد اين يكون الاسم طوله مابين 10 و2 وان يحتوى على حروف فقط

  Pattern p = Pattern.compile("[a-z]&&[A-Z^0-9]{10}|{2}");;

كن مثل طابع البريد ، التصق بهدفك...حتى تصل الى هناك!

#9

استخدم JTextField واعد كتابة الدالة insertString

http://docs.oracle.com/javase/1.4.2/docs/api/javax/swing/text/Document.html#insertString%28int,%20java.lang.String,%20javax.swing.text.AttributeSet%29

يمكنك داخلها عمل check على المدخلات فان لم تكن صحيحة تخطاها

1


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#10

اخواني لم اجد الحل بعد ,,

هل من مساعده...

كن مثل طابع البريد ، التصق بهدفك...حتى تصل الى هناك!

#11

عدلى الكود كالتالى

Pattern p = Pattern.compile("[a-zA-Z]{2,10}");


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

مواضيع مشابهة