输入框输入限制

xiaoxiao2021-02-28  128

public class VerifyText {     private Text text;//传入的组件,还可以是可书写下拉框等     private String regExp;//正则规则     public static final String REG_INT = "^([1-9]\\d*)|(0)|(-)|(-[1-9]\\d*)$"; // 整数      public static final String REG_NONNEGATIVEINT = "^([1-9]\\d*)|(0)$"; // 非负整数(正整数 + 0)      public static final String REG_POSITIVEINT = "^[1-9]\\d*$"; // 正整数      public static final String REG_NONPOSITIVEINT = "^(-)|(-[1-9]\\d*)|(0)$"; // 非正整数(负整数 + 0)       public static final String REG_NEGATIVEINT = "^(-)|(-[1-9]\\d*)$"; // 负整数      private int integerNum;//全局变量 正数位数     private int fractionNum;//全局变量 负数位数     /**      * 使用正则表达式进行用户输入验证      * @param text 传入的Text控件对象      * @param regExp 正则表达式字符串      */     public VerifyText(Text text, String regExp) {         this.text = text;         UpperCaseVerifyListener upperCaseVerifyListener = (UpperCaseVerifyListener) text.getData(                 "UpperCaseVerifyListener"); //$NON-NLS-1$ //如果有其他监听,清空,这个要看情况确定是否有,选加         if (upperCaseVerifyListener != null) {             this.text.removeVerifyListener(upperCaseVerifyListener);             this.text.setData("UpperCaseVerifyListener", null); //$NON-NLS-1$         } //主监听         RegExpVerifyListener regExpVerifyListener = null;         regExpVerifyListener = (RegExpVerifyListener) this.text.getData("DigitVerifyListener"); //$NON-NLS-1         if (regExpVerifyListener != null) {             this.text.setData("DigitVerifyListener", null);              this.text.removeVerifyListener(regExpVerifyListener);         }         this.regExp = regExp;         regExpVerifyListener = new RegExpVerifyListener();         this.text.addVerifyListener(regExpVerifyListener);         this.text.setData("DigitVerifyListener", regExpVerifyListener);         if (upperCaseVerifyListener != null) {             this.text.addVerifyListener(upperCaseVerifyListener);             this.text.setData("UpperCaseVerifyListener", upperCaseVerifyListener);          }     }

    /**

     * 入口方法 

     * 给定整数和小数位数进行用户输入验证      * @param text 传入的Text控件对象      * @param integerNum 要求输入的整数部分的位数,如果不限制则输入-1      * @param fractionNum 要求输入的小数部分的位数,如果不限制则输入-1      * @param isPositive 是否形成正数,true 正数和零,false负数和零      */     public VerifyText(Text text, int integerNum, int fractionNum, boolean isPositive) {         this.text = text;         UpperCaseVerifyListener upperCaseVerifyListener = (UpperCaseVerifyListener) text.getData(                 "UpperCaseVerifyListener");          if (upperCaseVerifyListener != null) {             this.text.removeVerifyListener(upperCaseVerifyListener);             this.text.setData("UpperCaseVerifyListener", null);          }         RegExpVerifyListener regExpVerifyListener = null;         regExpVerifyListener = (RegExpVerifyListener) this.text.getData("DigitVerifyListener");          if (regExpVerifyListener != null) {             this.text.removeVerifyListener(regExpVerifyListener);             this.text.setData("DigitVerifyListener", null);          }         this.integerNum = integerNum;         this.fractionNum = fractionNum;         this.regExp = populateRegExp(isPositive) + "|" + "(0)";          regExpVerifyListener = new RegExpVerifyListener();         this.text.addVerifyListener(regExpVerifyListener);         this.text.setData("DigitVerifyListener", regExpVerifyListener);         if (upperCaseVerifyListener != null) {             this.text.addVerifyListener(upperCaseVerifyListener);             this.text.setData("UpperCaseVerifyListener", upperCaseVerifyListener);          }     }     /**      * 给定整数和小数位数进行用户输入验证(正负数,零均可)      * @param text 传入的Text控件对象      * @param integerNum 要求输入的整数部分的位数,如果不限制则输入-1      * @param fractionNum 要求输入的小数部分的位数,如果不限制则输入-1      */     public VerifyText(Text text, int integerNum, int fractionNum) {         this.text = text;         UpperCaseVerifyListener upperCaseVerifyListener = (UpperCaseVerifyListener) text.getData(                 "UpperCaseVerifyListener");          if (upperCaseVerifyListener != null) {             this.text.removeVerifyListener(upperCaseVerifyListener);             this.text.setData("UpperCaseVerifyListener", null);         }         RegExpVerifyListener regExpVerifyListener = null;         regExpVerifyListener = (RegExpVerifyListener) this.text.getData("DigitVerifyListener"); //$NON-NLS-1$         if (regExpVerifyListener != null) {             this.text.removeVerifyListener(regExpVerifyListener);             this.text.setData("DigitVerifyListener", null);          }         this.integerNum = integerNum;         this.fractionNum = fractionNum;         this.regExp = populateRegExp(true) + "|" + "(0)" + "|" + populateRegExp(false);          ;         //新建监听,将新建的class的参数传入新建的监听         regExpVerifyListener = new RegExpVerifyListener();         this.text.addVerifyListener(regExpVerifyListener);         this.text.setData("DigitVerifyListener", regExpVerifyListener);          if (upperCaseVerifyListener != null) {             this.text.addVerifyListener(upperCaseVerifyListener);             this.text.setData("UpperCaseVerifyListener", upperCaseVerifyListener);          }     }     //确定正则规则     private String populateRegExp(boolean isPositive) {         StringBuffer buffer = new StringBuffer();         buffer.append("^");         buffer.append(!isPositive ? "(-)|" : "");          if (integerNum == -1) {             buffer.append("(" + (!isPositive ? "-" : "") + "[1-9]\\d*" + ")");              buffer.append("|");          } else if (integerNum > 0) {             buffer.append("(" + (!isPositive ? "-" : "") + "[1-9]\\d{0," + (integerNum - 1) + "}" + ")");             buffer.append("|");          }         if (fractionNum == -1) {             if (integerNum == -1) {                 buffer.append("(" + (!isPositive ? "-" : "") + "((0)|([1-9]\\d*))" + "\\." + ")");             } else if (integerNum > 0) {                 buffer.append(                         "(" + (!isPositive ? "-" : "") + "((0)|([1-9]\\d{0," + (integerNum - 1) + "}))" + "\\." + ")");             }             buffer.append("|");              if (integerNum == -1) {                 buffer.append("(" + (!isPositive ? "-" : "") + "((0)|([1-9]\\d*))" + "\\." + "\\d*" + ")");              } else if (integerNum > 0) {                 buffer.append(                         "(" + (!isPositive ? "-" : "") + "((0)|([1-9]\\d{0," + (integerNum - 1) + "}))" + "\\." + "\\d*"                          + ")"); //$NON-NLS-1$             }         } else if (fractionNum > 0) {             if (integerNum == -1) {                 buffer.append("(" + (!isPositive ? "-" : "") + "((0)|([1-9]\\d*))" + "\\." + ")");              } else if (integerNum > 0) {                 buffer.append(                         "(" + (!isPositive ? "-" : "") + "((0)|([1-9]\\d{0," + (integerNum - 1) + "}))" + "\\." + ")");              }             buffer.append("|");              if (integerNum == -1) {                 buffer.append(                         "(" + (!isPositive ? "-" : "") + "((0)|([1-9]\\d*))" + "\\." + "\\d{0," + (fractionNum - 1)                          + "}" + ")"); //$NON-NLS-1$ //$NON-NLS-2$             } else if (integerNum > 0) {                 buffer.append(                         "(" + (!isPositive ? "-" : "") + "((0)|([1-9]\\d{0," + (integerNum - 1) + "}))" + "\\."                          + "\\d{0," + fractionNum + "}" + ")");              }         }         buffer.append("$");          return buffer.toString();     }     //执行的监听     private class RegExpVerifyListener implements VerifyListener {         public void verifyText(VerifyEvent e) {             if (e.doit == true) {                 e.doit = false;                 if (fractionNum == -1 || fractionNum > 0) {                 if (e.text.contains("。")) {                 e.text = e.text.replace("。", ".");                 }                 }                 String inputStr = e.text;                 String originalStr = text.getText();                 int start = e.start;                 int end = e.end;                 /**                  * start == end 插入模式                  * start < end  替换模式                  */                 String resultStr = originalStr.substring(0, start) + inputStr + originalStr.substring(end);                 if ("".equals(resultStr)) {                      e.doit = true;                     return;                 } else {                     Pattern pattern = Pattern.compile(regExp);                     if (pattern.matcher(resultStr).matches()) {                         e.doit = true;                         return;                     }                 }             }         }     }     /**      * Launch the application      * @param args      */     public static void main(String[] args) {         final Display display = Display.getDefault();         final Shell shell = new Shell();         shell.setSize(500, 375);         shell.setText("SWT Application"); //$NON-NLS-1$         //         shell.open();         Text text = new Text(shell, SWT.BORDER);         new VerifyText(text, 2, 0);         text.setBounds(175, 110, 120, 30);         shell.layout();         while (!shell.isDisposed()) {             if (!display.readAndDispatch()) {                 display.sleep();             }         }     }

}

转载请注明原文地址: https://www.6miu.com/read-22912.html

最新回复(0)