官术网_书友最值得收藏!

5.2 數據驗證

在程序開發(fā)過程中,為了保持數據的統一完整性和合法性,在數據保存到數據庫之前,對數據進行驗證這一環(huán)節(jié)是必不可少的。本節(jié)將介紹幾個常用的數據驗證的JavaBean實例。

實例138 判斷字符串是否以指定字符開頭

光盤位置:光盤\MR\05\138

初級

實用指數:

實例說明

在網站注冊用戶信息時,用戶名信息往往不允以數字或者其他特殊字符開頭。本實例將介紹如何判斷字符串是否以指定字符開頭,運行結果如圖5.14所示。

圖5.14 判斷字符串是否以指定字符串開頭

關鍵技術

本實例主要應用String類中提供的startsWith()方法來實現,該方法用于判斷字符串是否以指定的前綴開始,其語法結構如下:

        public boolean startsWith(String prefix)

參數說明

prefix:為指定的開始字符串,如果字符串以prefix開頭,則方法返回值為true,否則返回false。

在String類中還實現了一個同名的重載方法,語法結構如下:

        public boolean startsWith(String prefix, int toffset)

參數說明

? prefix:為開始的字符串。

? toffset:為子字符串出現的索引位置。

功能:該方法用于測試此字符串從指定索引開始的子字符串是否以指定前綴開始。例如,字符串“abcdefg”,判斷第二個索引處是否以“c”開頭,代碼如下:

        String str="abcdefg";
        str.startsWith("c", 2);

設計過程

(1)新建名為StringUtil的JavaBean類,用于判斷字符串是否以指定的子字符串開頭,關鍵代碼如下:

        public class StringUtil {
              private String startStr;         //指定開頭的字符串
              private String str;              //被判斷的字符串
              private boolean check;           //判斷結果
              public String getStartStr() {
                  return startStr;
              }
              public void setStartStr(String startStr) {
                  this.startStr = startStr;
              }
              public String getStr() {
                  return str;
              }
              public void setStr(String str) {
                  this.str = str;
              }
              public boolean isCheck() {
                  //使用startsWith()方法判斷字符串是否以指定字符開頭,如果是則返回true,否則返回false
                  return str.startsWith(startStr);
              }
        }

(2)新建index.jsp頁,該頁用于輸入表單信息,關鍵代碼如下:

        <form action="check.jsp"method="post">
          <table>
            <tr>
              <td align="right">請輸入字符串:</td><td><input type="text"name="str"  /></td>
            </tr>
            <tr>
              <td align="right">請輸入開頭的字符串:</td>
              <td><input type="text"name="startStr"  /></td>
            </tr>
            <tr>
              <td colspan="2"align="center"><input type="submit"value="驗證"/></td>
            </tr>
          </table>
        </form>

秘笈心法

String類的startsWith()方法并不是唯一判斷字符串是否以指定字符開頭的方法,還可以通過String類的indexOf()方法來實現。indexOf()方法包含4種重載方法,這些方法的說明請參見Java API。

實例139 檢查字符串是否包含英文字母

光盤位置:光盤\MR\05\139

初級

實用指數:

實例說明

在實際開發(fā)過程中,有時需要判斷一個字符串是否包含英文字母。本實例將介紹如何檢查一個字符串中是否包含英文字母,運行結果如圖5.15所示。

圖5.15 檢查字符串中是否包含英文字母

關鍵技術

本實例主要應用String類的toCharArray()方法。首先通過該方法將指定的字符串轉換為字符數組,然后循環(huán)該字符數組,已知大寫英文字母的ASCII碼范圍在65~90之間,小寫英文字母的ASCII碼范圍在97~122之間,所以根據字符的ASCII碼值就可以判斷出字符串中是否包含英文字母。

設計過程

(1)新建名為StringUtil的JavaBean類,在該類中包含一個判斷字符串是否包含英文字母的方法,關鍵代碼如下:

        public class StringUtil {
              private String str;                                  //要判斷的字符串
              private boolean hasEn;                               //是否包含英文字符
              public String getStr() {
                  return str;
              }
              public void setStr(String str) {
                  this.str = str;
              }
              public boolean isHasEn() {
                  char cArr[]=str.toCharArray();                  //將字符串轉換為字符數組
                  boolean b =false;
                  StringBuffer sb =new StringBuffer("");
                  StringBuffer sb2 =new StringBuffer("");
                  for(int i=0; i<cArr.length; i++){
                      int ascii=(int)cArr[i];                     //強制轉換可以直接得到字符的ASCII碼
                      //英文字符的ASCII碼范圍,大寫字母A~Z的范圍是65~90,小寫字母a~z的范圍是97~122
                      if((ascii>=65&&ascii<=90)||(ascii>=97&&ascii<=122)){
                            sb.append(cArr[i]);                   //將每個英文字母添加到StringBuffer對象中
                      }
                      else{
                            sb2.append(cArr[i]);
                      }
                  }
                  if(! sb.toString().equals(""))                 //如果保存英文字母的字符串不為"",說明該字符串包含英文字母
                      hasEn=true;
                  else
                      hasEn=false;
                  return hasEn;
              }
              public void setHasEn(boolean hasEn) {
                  this.hasEn = hasEn;
              }
        }

(2)新建index.jsp頁,用于輸入表單信息,關鍵代碼如下:

        <form action="check.jsp"method="post">
            <table>
            <tr>
                <td align="right">請輸入字符串:</td>
                <td><input type="text"name="str" size="30"/></td>
            </tr>
            <tr>
                <td colspan="2"align="center"><input type="submit"value="檢 查"/></td></tr>
            </table>
            </form>

(3)新建check.jsp頁,用于獲得表單信息,并通過StringUtil類中的方法判斷字符串是否包含英文字母,關鍵代碼如下:

        <%
          String str = request.getParameter("str");
        %>
        <! -- 使用useBean動作標簽導入JavaBean對象 -->
        <jsp:useBean id="strBean"class="com.lh.bean.StringUtil"></jsp:useBean>
        <! -- 對StringUtil類的str屬性賦值 -->
        <jsp:setProperty property="str"name="strBean"value="<%=str %>"/>
        <table>
              <tr>
                  <td align="right">輸入的字符串:</td>
                  <td>
                      <! -- 從StringUtil對象中獲得str的屬性值 -->
                      <jsp:getProperty property="str"name="strBean"/>
                  </td>
              </tr>
              <tr><td align="right">是否包含英文字母:</td>
                  <td>
                      <! -- 從StringUtil對象中獲得hasEn的屬性值 -->
                      <jsp:getProperty property="hasEn"name="strBean"/>
                  </td>
              </tr>
              <tr>
                  <td align="right">去掉英文字母后的字符串:</td>
                  <td>
                      <! -- 從StringUtil對象中獲得cnStr的屬性值 -->
                      <jsp:getProperty property="cnStr"name="strBean"/>
                  </td>
              </tr>
        </table>

秘笈心法

通過String類的hashCode()方法也可以實現本實例,在類的main()方法中編寫如下代碼:

        String str = "abcd";
        char cArr[] = str.toCharArray();
        for(int i=0; i<cArr.length; i++){
              int code = String.valueOf(cArr[i]).hashCode();
              System.out.println(code);
        }

以上代碼執(zhí)行后,會分別輸出a、b、c、d的ASCII碼值。

實例140 檢查字符串是否包含數字

光盤位置:光盤\MR\05\140

初級

實用指數:

實例說明

在實際開發(fā)過程中,有時需要判斷一個字符串是否包含數字。本實例將介紹如何判斷字符串是否包含數字,其運行效果如圖5.16所示。

圖5.16 判斷字符串是否包含數字

關鍵技術

本實例的實現過程與實例139的實現過程大同小異,都是通過循環(huán)字符數組,根據字符的ASCII碼值來判斷字符是否為字母或數字。數字0~9的ASCII碼值范圍在48~57之間,所以在循環(huán)中,根據判斷每個字符的ASCII碼是否在48~57之間,就可以知道字符串是否包含數字。

設計過程

新建StringUtil的JavaBean類,該類用于判斷字符串是否包含數字,關鍵代碼如下:

        public class StringUtil {
        private String  str;                        //要檢查的字符串
        private boolean hasNum;                     //是否包含數字
        private String othersStr;                   //去掉數字后的字符串
        public boolean isHasNum() {
            char  cArr[]=str.toCharArray();         //將字符串轉換為字符數組
            StringBuffer sbNum =new StringBuffer("");
            StringBuffer sbOthers =new StringBuffer("");
            for(int i=0; i<cArr.length; i++){
                  int ascii=(int)cArr[i];           //強制轉換可以直接得到字符的ASCII碼
                  if(ascii>=48&&ascii<=57){         //數字的ASCII碼范圍在48~57之間
                      sbNum.append(cArr[i]);        //將每個數字添加到StringBuffer對象中
                  }
                  else{
                      sbOthers.append(cArr[i]);
                  }
            }
            this.setOthersStr(sbOthers.toString());
            if(! sbNum.toString().equals(""))
                  hasNum=true;
            else
                  hasNum=false;
            return hasNum;
        }
                      …//此處省略了屬性的get和set方法
        }

秘笈心法

本實例還可以通過String類的hashCode()方法實現。

實例141 判斷用戶輸入的日期是否為當前日期

光盤位置:光盤\MR\05\141

初級

實用指數:

實例說明

在實際開發(fā)過程中,會遇到判斷用戶輸入的日期是否為當前日期的情況。本實例將介紹如何判斷用戶輸入的日期是否為系統當前日期,運行效果如圖5.17所示。

圖5.17 判斷用戶輸入的日期是否為當前日期

關鍵技術

本實例主要應用java.util.Calendar類實現,首先使用該類的getInstance()方法來獲取系統當前時間的日歷對象,然后使用該對象中提供的一系列方法可以獲得當前時間的年、月、日、小時、分、秒等值。

? 創(chuàng)建一個當前時間的Calendar對象,代碼如下:

        Calendar now = Calendar.getInstance();

? 獲得當前時間的年份,代碼如下:

        int year = now.get(now.YEAR);

? 獲得當前時間的月份,代碼如下:

        int month = now.get(now.MONTH)+1; //默認的月份是從0開始的,所以需要加1

? 獲得當前時間的日,代碼如下:

        int date = now.get(now.DAY_OF_MONTH);

? 獲得當前時間的小時,代碼如下:

        int hour = now.get(now.HOUR_OF_DAY);

? 獲得當前時間的分鐘,代碼如下:

        int minute = now.get(now.MINUTE);

? 獲得當前時間的秒,代碼如下:

    int second = now.get(now.SECOND);

設計過程

(1)新建名為StringUtil的JavaBean類,該類用于判斷用戶輸入的日期是否為當前日期,關鍵代碼如下:

    public class StringUtil {
    private String dateStr;                                          //用戶輸入的日期
    private boolean today;                                           //判斷是否為今天
    private String cue;                                              //提示信息
    public StringUtil(){}
    public String getDateStr() {
          return dateStr;
    }
    public void setDateStr(String dateStr) {
          dateStr=dateStr.replaceAll("", "");                       //替換日期中的空格為""
          this.dateStr = dateStr;
    }
    public boolean isToday() {
          String dateArr[]=dateStr.split("-");                      //將日期字符串分解為數組
          int year=Integer.parseInt(dateArr[0]);
          int month=Integer.parseInt(dateArr[1]);
          int date=Integer.parseInt(dateArr[2]);
          Calendar now=Calendar.getInstance();                      //獲得系統當前時間的Calendar對象
          int nowYear=now.get(now.YEAR);                            //獲得當前時間的年
          int nowMonth=now.get(now.MONTH)+1;                        //獲得當前時間的月
          int nowDate=now.get(now.DAY_OF_MONTH);                    //獲得當前時間的日
          if(year==nowYear&&month==nowMonth&&date==nowDate){ //如果年月日的值都相同
              cue="輸入的日期為當前日期!";
              today=true;
          }else{
              cue="輸入的日期不是當前日期!";
              today=false;
          }
          return today;
    }
    ……                                                           //省略了一些屬性的get和set方法
    }

(2)新建index.jsp頁,用于輸入表單信息,關鍵代碼如下:

        <form action="check.jsp"method="post">
            <table>
               <tr>
                  <td align="right">請輸入日期:</td>
                  <td><input type="text"name="datestr"/><font>格式為:2012-12-21</font></td>
               </tr>
               <tr>
                  <td colspan="2"align="center"><input type="submit"value="檢 查"/></td>
               </tr>
            </table>
        </form>

(3)新建check.jsp頁,判斷用戶輸入的日期是否為當前日期,關鍵代碼如下:

        <%
          String dateStr = request.getParameter("datestr");
        %>
        <! -- 使用useBean動作標簽導入JavaBean對象 -->
        <jsp:useBean id="strBean"class="com.lh.bean.StringUtil"></jsp:useBean>
        <! -- 對StringUtil類的dateStr屬性賦值 -->
        <jsp:setProperty property="dateStr"name="strBean"value="<%=dateStr %>"/>
        <table>
            <tr>
                  <td align="right">輸入的日期為:</td>
                  <td>
                      <! -- 從StringUtil對象中獲得dateStr的屬性值 -->
                      <jsp:getProperty property="dateStr"name="strBean"/>
                  </td>
              </tr>
              <tr>
                  <td align="right">是否為當前日期:</td>
                  <td>
                        <! -- 從StringUtil對象中獲得today的屬性值 -->
                        <jsp:getProperty property="today"name="strBean"/>
                  </td>
              </tr>
              <tr><td align="right">提示信息:</td>
                  <td>
                        <! -- 從StringUtil對象中獲得cue的屬性值 -->
                        <jsp:getProperty property="cue"name="strBean"/>
                  </td>
              </tr>
        </table>

秘笈心法

本實例也可以通過java.util.Date類實現,Date類表示特定的瞬間,精確到毫秒。通過Date類的getXXX()方法可以獲得Date對象中的年、月、日、小時、分、秒,通過setXXX()方法可以設置Date對象中的年、月、日、小時、分、秒。但是Date類的這些方法從JDK 1.1開始,已經被Calendar類中相應的方法取代。所以在實際的開發(fā)中,應該盡量使用Calendar類。

實例142 判斷是否為數字

光盤位置:光盤\MR\05\142

初級

實用指數:

實例說明

在網站中填寫表單信息時,有些字段信息必須是數字格式的,如用戶的年齡、工資收入、手機號碼等。本實例將介紹如何判斷用戶輸入的數據是否為數字,其運行效果如圖5.18所示。

圖5.18 判斷是否為數字

關鍵技術

本實例主要通過字符的ASCII碼值來判斷數據是否為數字,數字的ASCII碼值的范圍在48~57之間。首先將整個字符串通過String類的toCharArray()方法轉換為字符數組,然后在循環(huán)中把每個字符轉換為ASCII碼,判斷是否在4~57之間,如果條件滿足則使用StringBuffer對象累加每個字符,最后判斷StringBuffer對象的字符串長度是否等于字符數組的長度,如果相等則說明整個字符串為數字。

設計過程

(1)新建名為StringUtil的JavaBean類,該類主要用于驗證字符串是否為數字,關鍵代碼如下:

        public class StringUtil{
        private String numStr;                               //要判斷的字符串
        private boolean number;                              //判斷結果
        private String cue;                                  //提示信息
        public void setNumStr(String numStr){
              numStr=numStr.replaceAll("", "");              //去掉字符串中的空格
              this.numStr=numStr;
        }
        public boolean isNumber(){
              char cArr[]=numStr.toCharArray();              //將字符串轉換為字符數組
              StringBuffer sb=new StringBuffer("");          //創(chuàng)建動態(tài)字符串對象
              for(int i=0; i<cArr.length; i++){
                   int ascii=(int)cArr[i];                   //將字符強制轉換為int值,該值為字符的ASCII碼
                   if(ascii>=48&&ascii<=57){                 //數字0~9的ASCII碼范圍在48~57之間
                      sb.append(cArr[i]);                    //條件滿足,將字符添加到StringBuffer字符串末尾
                   }
              }
              if(sb.length()==cArr.length){                  //如果StringBuffer字符串的長度等于字符數組的長度
                   number=true;                              //該字符串為數字
                   this.setCue("您輸入的是數字!");
              }
              else{
                   number=false;
                   this.setCue("您輸入的不是數字!");
              }
              return number;
        }
        ……       //此處省略了部分get和set方法
        }

(2)新建index.jsp頁,用于輸入表單信息,關鍵代碼如下:

        <form action="check.jsp"method="post">
            <table>
              <tr>
                  <td align="right">月工資收入:</td>
                  <td><input type="text"name="numstr"/>元</td>
              </tr>
              <tr>
                  <td colspan="2"align="center"><input type="submit"value="驗證"/></td>
              </tr>
            </table>
        </form>

(3)新建check.jsp頁,驗證用戶輸入的字符串是否為數字,關鍵代碼如下:

        <%
              String numStr = request.getParameter("numstr");
        %>
        <! -- 使用useBean動作標簽導入JavaBean對象 -->
        <jsp:useBean id="strBean"class="com.lh.bean.StringUtil"></jsp:useBean>
        <! -- 對StringUtil類的numStr屬性賦值 -->
        <jsp:setProperty property="numStr"name="strBean"value="<%=numStr %>"/>
        <table>
              <tr>
                  <td align="right">輸入的字符串為:</td>
                  <td>
                      <! -- 從StringUtil對象中獲得numStr的屬性值 -->
                      <jsp:getProperty property="numStr"name="strBean"/>
                  </td>
              </tr>
              <tr>
                  <td align="right">是否為數字:</td>
                  <td>
                      <! -- 從StringUtil對象中獲得numStr的屬性值 -->
                      <jsp:getProperty property="number"name="strBean"/>
                  </td>
              </tr>
              <tr>
                  <td align="right">提示信息:</td>
                  <td>
                      <! -- 從StringUtil對象中獲得cue的屬性值 -->
                      <jsp:getProperty property="cue"name="strBean"/>
                  </td>
              </tr>
        </table>

秘笈心法

本實例主要是將一個字符串分解為字符數組,然后判斷每個字符是否為數字,如果是數字就添加到StringBuffer對象中,最后把這個StringBuffer對象的長度與輸入字符串的長度對比,判斷輸入的整個字符串是否為數字。

實例143 判斷用戶名是否有效

光盤位置:光盤\MR\05\143

初級

實用指數:

實例說明

有些網站用戶注冊時,用戶名信息只能由字母、數字和下劃線組成,并且首字符必須為字母,用戶名中不允許包含特殊字符等。本實例將介紹如何判斷一個用戶名是否有效,其運行效果如圖5.19所示。

圖5.19 判斷用戶名是否有效

關鍵技術

本實例主要應用字符的ASCII碼來判斷用戶名是否有效,其中英文字母的ASCII范圍是65~90(大寫字母)和97~122(小寫字母),下劃線的ASCII碼為95,數字的ASCII碼范圍在47~58之間。

設計過程

(1)新建名為StringBuffer的JavaBean類,該類用于判斷用戶名是否有效,關鍵代碼如下:

        public class StringUtil {
        private String str;                               //要判斷的字符串
        private boolean valid;                            //是否有效
        private String cue;                               //提示信息
        public boolean isValid(){                         //boolean屬性的get方法寫法為isXXX()
              char cArr[]=str.toCharArray();              //字符串轉換為字符數組
              int firstChar=(int)cArr[0];                 //第一個字符的ASCII碼
              StringBuffer sb = new StringBuffer("");
              if((firstChar>=65&&firstChar<=90)||(firstChar>=97&&firstChar<=122)){ //判斷首字符是否為字母
                  for(int i=1; i<cArr.length; i++){
                      int ascii=cArr[i];              //獲得字符的ASCII碼
                      //判斷字符是否為字母、數字或下劃線,下劃線的ASCII碼為95
                      if((ascii>=48&&ascii<=57)||(ascii>=65&&ascii<=90)|| (ascii==95)||(ascii>=97&&ascii<=122)){
                            sb.append(cArr[i]);       //如果條件滿足,將字符添加到StringBuffer字符串的末尾
                      }
                  }
                  int length = cArr.length-sb.toString().length();
                  if(length==1){ //如果被判斷字符串的長度與StringBuffer字符串記錄的長度差1(即去掉首字符的長度)
                      this.setCue("用戶名格式正確!");
                      valid=true;
                      return valid;
                  }else{
                      this.setCue("用戶名格式錯誤,只能由字母、數字或下劃線組成!");
                      valid=false;
                      return valid;
                  }
              }else{                                  //如果首字符不是字母,直接返回false
                  this.setCue("用戶名格式不對,首字符必須為字母!");
                  valid=false;
                  return valid;
              }
        }
        … //此處省略了其他屬性的get和set方法
        }

(2)新建index.jsp頁,用于輸入表單信息,關鍵代碼如下:

        <form action="check.jsp"method="post">
            <table>
              <tr>
                  <td align="right">請輸入用戶名:</td>
                  <td><input type="text"name="name"/>
                      <font>只能由字母、數字或下劃線組成</font></td>
              </tr>
              <tr>
                  <td colspan="2"align="center"><input type="submit"value="驗證"/></td>
              </tr>
              </table>
        </form>

(3)新建check.jsp頁,用于判斷用戶名是否有效,關鍵代碼如下:

        <%
              String name = request.getParameter("name");
        %>
        <! -- 使用useBean動作標簽導入JavaBean對象 -->
        <jsp:useBean id="strBean"class="com.lh.bean.StringUtil"></jsp:useBean>
        <! -- 對StringUtil類的str屬性賦值 -->
        <jsp:setProperty property="str"name="strBean"value="<%=name %>"/>
        <table>
              <tr>
                  <td align="right">輸入的用戶名為:</td>
                  <td>
                      <! -- 從StringUtil對象中獲得Str的屬性值 -->
                      <jsp:getProperty property="str"name="strBean"/>
                  </td>
              </tr>
              <tr>
                  <td align="right">是否有效:</td>
                  <td>
                      <! -- 從StringUtil對象中獲得valid的屬性值 -->
                      <jsp:getProperty property="valid"name="strBean"/>
                  </td>
              </tr>
              <tr>
                  <td align="right">提示信息:</td>
                  <td>
                      <! -- 從StringUtil對象中獲得cue的屬性值 -->
                      <jsp:getProperty property="cue"name="strBean"/>
                  </td>
              </tr>
        </table>

秘笈心法

在本實例中,將字符轉換為ASCII碼時,還可以通過String類的hashCode()方法實現。

主站蜘蛛池模板: 房产| 南溪县| 新竹县| 垣曲县| 乐平市| 祁阳县| 左云县| 仙游县| 丰台区| 抚顺县| 濉溪县| 玉环县| 新蔡县| 宁波市| 开原市| 嵊泗县| 施甸县| 文山县| 新沂市| 赤峰市| 黄平县| 唐山市| 湛江市| 太保市| 阳信县| 姚安县| 视频| 慈利县| 本溪| 德化县| 龙陵县| 桂平市| 保山市| 常宁市| 公安县| 彩票| 滨州市| 阳新县| 越西县| 旺苍县| 策勒县|