2010-04-19 26 views
2

嗨我試圖設置一個RegexpValidator,它只接受長度在6-30個字符之間的一個字母數字字符串,並且需要一個數字。我是新來的正則表達式,我嘗試過的所有東西似乎都會返回無效的ValidationRsultEvent。下面是一段代碼:需要Flex Regex驗證表達式只允許字母數字值的密碼,並且需要一個數字

<mx:RegExpValidator id="regexValidator" source="{passwordInput}" property="text" 
         triggerEvent="" valid="onPasswordValidate(event)" invalid="onPasswordValidate(event)" /> 

private function validateRegister():void 
{ 
    regexValidator.expression = "^(?=.*(\d|\W)).{6,30}$"; 
    regexValidator.validate(); 
} 

回答

3

我不知道會是什麼導致驗證錯誤,但是至於你的正則表達式去,與至少一個數字字母數字字符串匹配嘗試^(?=.*\d)\w{6,30}$

^   # Match begining of string 
(?=.*\d) # Lookahead, assert there is any number of characters followed by a digit 
\w{6,30} # \w matches letters, digits and the underscore character, 6-30 of them 
$   # Match End of string 

如果您只想匹配字母和數字,而不是\w,則可以使用[0-9a-zA-Z]

您當前的正則表達式^(?=.*(\d|\W)).{6,30}$是匹配包含其他至少一個字符比[a-zA-Z_],即6之間和30個字符長,這並不一定(\d|\W數字或「無字」字符匹配)的任意字符串符合你指定的要求。

+0

特殊的解釋,gnarf! – 2010-04-19 09:03:09

+0

非常感謝!逃避做到了。 – ChickensDontClap 2010-04-20 03:39:52

+0

偉大的答案gnarf。 +1。 – 2011-01-19 00:37:59

1

根據ActionScript manual反斜槓是一個保留字符。因此你的表情應該看起來像

"^(?=.*(\\d|\\W)).{6,30}$" 
+0

只有當你想要匹配反斜槓字符時,你需要雙反斜槓。我不認爲它適用於這種情況。 – 2010-04-19 07:51:39

+0

@macke:反斜槓在正則表達式中也有特殊含義。在這種情況下,表達式應該包含「\ d」作爲數字的快捷方式,但除非您轉義反斜槓,否則它只包含「d」或其他任何「\ d」在ActionScript中的含義。 – Jens 2010-04-19 07:59:16

+0

我知道,我想你可能誤解了我的評論。不過,我認爲你畢竟是正確的。我錯過了表達式被定義爲一個字符串,並且在字符串中,反斜槓肯定需要被轉義以產生預期的結果。通常,regexps是使用/ expression/options語法定義的,在這種情況下,反斜槓不應該被轉義(除非實際上想要匹配反斜槓)。無論如何,我站在更正! – 2010-04-19 09:10:13

相關問題