我是RegExp的新手,我尝试在Flex AS3中创建一个RegExp,它匹配我的表达式my_regex
中给出的模式之外的任何内容。也就是说,我希望匹配除“^():,?+ * /”之外的所有内容。“ (没有双引号)。但我的程序表现得非常奇怪,它会在替换字符键入时显示错误字符串。请说明我的正则表达式有什么问题。
`
<fx:Script>
<![CDATA[
private const my_regex:RegExp = /\b[^():,?+*\.]/g;
private function validateNow(evt:Event):void {
if (my_regex.test(ti.text)) {
ti.errorString = null;
} else {
ti.errorString = "some error here";
}
}
]]>
</fx:Script>
<mx:TextInput id="ti" change="validateNow(event)"/>
`
答案 0 :(得分:0)
您的if
逻辑似乎已被逆转。
摆脱\b
,因为它代表“字边界”(此处不需要)。
字符类开头的^
(方括号内的内容)否定了它。字符类的任何其他位置的^
表示该字面字符(这就是我最后添加一个字符的原因)。
如果您在方法中使用var ti:TextInput = evt.target as TextInput;
,则可以将该方法应用于多个不同的TextInputs(为什么使用旧的mx
组件,更好地使用spark
)
这是我的解决方案(第二个TextInput是红色的,因为正则表达式不允许使用空格):
这里是代码:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx">
<fx:Script>
<![CDATA[
private const my_regex:RegExp = /[^():,?+*\.^]/;
private function handleChange(evt:Event):void {
var ti:TextInput = evt.target as TextInput;
trace("text=" + ti.text);
trace("test=" + my_regex.test(ti.text) + "\n");
if (my_regex.test(ti.text)) {
ti.errorString = 'Only these chars are allowed: ():,?+*.^';
} else {
ti.errorString = null;
}
}
]]>
</fx:Script>
<s:TextInput id="ti1" change="handleChange(event)"
horizontalCenter="0" top="50"/>
<s:TextInput id="ti2" change="handleChange(event)"
horizontalCenter="0" top="100"/>
<s:TextInput id="ti3" change="handleChange(event)"
horizontalCenter="0" top="150"/>
</s:Application>
答案 1 :(得分:-1)
你的正则表达式有几个问题......
首先,你需要逃避许多这些角色,因为它们在正则表达式中具有特殊含义。您可以通过在每个前面添加反斜杠来逃避它们的特殊功能(从而仅指代字符)。老实说,你可以逃脱它们。
编辑:\ b确实在大多数情况下标记了单词边界,但是,这与我们的目的无关。
您修改的正则表达式是......
private const my_regex:RegExp = /[\^\(\)\:\,\?\+\*\\\.]/g;
另一个考虑因素是,如果你运行my_regex.test(ti.text)
,如果字符串中出现任何这些字符,它将返回true。为了使您的错误字符串在匹配时具有值,您必须反转逻辑。在调用!
之前,我使用了not(.test
)运算符。
private function validateNow(evt:Event):void {
if (!my_regex.test(ti.text)) {
ti.errorString = null;
} else {
ti.errorString = "some error here";
}
}
我强烈建议您方便地使用正则表达式。我个人最喜欢的是The ActionScript 3.0 Bible 2e。第12章详细介绍了详尽的内容。如果您更喜欢网络资源,the AS3 documentation效果很好。