如何在TextField中仅禁止输入单个数字3和4,而非包含它们的多位数?
解决TextField禁止单个输入3/4但允许含3/4多位数的问题
你遇到的问题很典型——restrict属性是针对单个字符做限制的,所以你写的"0-9^3-4"会直接把所有3和4字符都拦下来,不管它是不是多位数的一部分。要实现「单个3/4禁止,多位数里的3/4允许」的需求,得换个思路用TextEvent.TEXT_INPUT事件来动态判断输入内容。
具体实现步骤
- 先给TextField设置允许所有数字输入(不要用restrict排除3/4)
- 监听
TEXT_INPUT事件,在输入发生时判断:如果输入后文本框内容变成单个3或4,就阻止这次输入;否则允许通过。
完整代码示例
import flash.text.TextField; import flash.text.TextFieldType; import flash.events.TextEvent; var theTextField:TextField = new TextField(); theTextField.type = TextFieldType.INPUT; theTextField.border = true; theTextField.x = 10; theTextField.y = 10; theTextField.restrict = "0-9"; // 允许所有数字输入 addChild(theTextField); // 添加输入事件监听 theTextField.addEventListener(TextEvent.TEXT_INPUT, onTextInput); function onTextInput(event:TextEvent):void { // 计算输入后的完整文本 var newText:String = theTextField.text + event.text; // 判断是不是单个3或4 if (newText === "3" || newText === "4") { event.preventDefault(); // 阻止这次输入 } // 其他情况(比如空输入、多位数含3/4)都允许 }
补充优化(处理删除后变成单个3/4的情况)
上面的逻辑只拦截输入操作,如果用户先输入"33"再删成"3",文本框会留下单个3。如果要处理这种场景,可以再监听TextEvent.CHANGE事件做二次校验:
theTextField.addEventListener(TextEvent.CHANGE, onChange); function onChange(event:TextEvent):void { var tf:TextField = event.target as TextField; if (tf.text === "3" || tf.text === "4") { tf.text = ""; } }
内容的提问来源于stack exchange,提问作者أسامة الزاهد
相关产品推荐
相关产品推荐

