输入框输入限制

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();
            }
        }
    }


}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值