跟在PHP regular expression to match alpha-numeric strings with some (but not all) punctuation之後,我需要接受至少兩種類型的字符,它們必須是數字,字母或標點符號中的一種,字符串必須介於6和18個字符。這是最好的方式嗎?我使用RegExLib中的模式構造了這個正則表達式。PHP正則表達式:字符串必須包含字符類型
preg_match('@' .
// one number and one letter
'^(?=.*\d)(?=.*[a-zA-Z])[!-%\'-?A-~]{6,18}$' .
// one number and one punctuation
'|^(?=.*\d)(?=.*[!-%\'-/:-?\[-`{-~])[!-%\'-?A-~]{6,18}$' .
// or one punctation and one
'|^(?=.*[!-%\'-/:-?\[-`{-~])(?=.*[a-zA-Z])[!-%\'-?A-~]{6,18}$' .
'@i', $pass, $matches);
我測試了我的正則表達式所有三種類型,它仍然工作。前視也負責排序。但我看到你的更可讀性和工作。 – nymo