1

我正在尝试在 AS3/Flex4.6 中使用正则表达式来检查满足以下条件的密码:

  1. 6 到 15 个字符之间
  2. 必须至少包含一个小写字母
  3. 必须包含至少一个大写字母
  4. 必须包含至少一个数字(例如 0-9)

到目前为止,这是我正在使用的:

<mx:RegExpValidator source="{loginPwd}" property="text" 
     expression="^\w*(?=\w*\d)(?=\w*[a-z])(?=\w*[A-Z])\w*$"  
     valid="rh(event);" invalid="rh(event);"/>

除了捕获 6 到 15 个字符的密码长度之外,它可以做所有事情。我可以使用 aStringValidator来做到这一点,但我宁愿RegExpValidator两者都做(这样我就不会出现为一个 TextInput 字段显示多个错误消息的情况,例如每个验证器一个)。

我尝试了以下正则表达式,但是在它们编译时,它们不起作用(例如,aaAA33不通过)。

expression="((?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,15})"
expression="(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,15}"
expression="(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,15}^$"
expression="^.*(?=.{6,15})(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$"
4

1 回答 1

1

我在 mac 上用我的 Regex 测试工具尝试了你的表达

 "((?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,15})" - works
 "^.*(?=.{6,15})(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).*$" - works

按预期工作。您是否尝试将字符串与正常的动作脚本正则表达式模式匹配?我做到了。

public function runTest():void
{
    var testArray:Array = ["aaBB99","aaaaa99","AAAAAAA","A3b","A3bdsdsdsd"];
    var reg:RegExp = new RegExp("^.*(?=.{6,15})(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).*$");

    for each ( var value:String in testArray )
    {
        trace(value.match(reg));
    }
}

输出是:

[trace] aaBB99
[trace] null
[trace] null
[trace] null
[trace] A3bdsdsdsd

看这里没问题

于 2012-05-13T07:57:30.303 回答