【问题标题】:Excluding exaclty two numbers from being typed in a TextField排除在 TextField 中输入的两个数字
【发布时间】:2018-09-04 15:35:16
【问题描述】:

我想在 TextField 中排除两个数字“3 和 4”,我试过了:

var theTextField:TextField = new TextField();
theTextField.type = TextFieldType.INPUT;
theTextField.border = true;
theTextField.x = 10;
theTextField.y = 10;
addChild(theTextField);

theTextField.restrict="0-9^3-4";

这成功排除了在文本字段中输入 3 和 4,但它也阻止了您输入 33 或 45,例如,我只想排除 3 和 4。任何包含 3 或 4 的两位或三位数字都应该被允许,知道我该怎么做吗?

【问题讨论】:

  • 如果您不允许用户输入 3(复制粘贴除外),您怎么能在文本字段中输入 33?除非您事后评估文本字段的内容,而不是完全阻止该字符,否则您不能同时拥有两者。
  • 放置一个运行时验证(Event.CHANGE 来自您的 TextField),如果 TextField 包含无效条目。

标签: actionscript-3 flash actionscript


【解决方案1】:

所以只限制组合 34 和 43?

就像 Organis 评论的那样,您应该通过 Event.CHANGE 验证输入,如果您还没有让用户知道限制,请显示某种警告。

在验证功能中,您可以检查输入文本是“34”还是“43”,然后从中删除第二个字符以模拟实际限制:

theTextField.addEventListener(Event.CHANGE, validateInput);

function validateInput(e:Event):void{
    if(e.target.text == "34" || e.target.text == "43"){
        e.target.text = e.target.text.split("")[0];
    }
}

您还可以使用 RegExp 来检查匹配,并在函数内使用 .slice 而不是 .split

var pattern:RegExp = /^[34|43]{2}$/;
if(pattern.test(e.target.text)){
    e.target.text = e.target.text.slice(0,-1);
}

如果您最终要得到更复杂的限制模式,使用.split,您可以通过检查nth 字符等来构建更复杂的检查:

if(e.target.text.length == 2){
    if((e.target.text.split("")[0] == "3" && e.target.text.split("")[1] == "4") ||
        (e.target.text.split("")[0] == "4" && e.target.text.split("")[1] == "3")){
            e.target.text = e.target.text.slice(0,-1);
        }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 2016-06-30
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多