我想匹配一個字符串,如果它包含最多16位數字和最多11個字符,但總共最多27個字符。我試過(\d{0,16}\w{0,11}){27}
,但它似乎不起作用。如何使用正則表達式查找字符串中數字和字符的確切數量?
編輯:
MATCH:145214mkjnkj
或1234567891011125abcdefghijk
(可混)
DONT MATCH:abababababab123
或12345678910111213abc
我想匹配一個字符串,如果它包含最多16位數字和最多11個字符,但總共最多27個字符。我試過(\d{0,16}\w{0,11}){27}
,但它似乎不起作用。如何使用正則表達式查找字符串中數字和字符的確切數量?
編輯:
MATCH:145214mkjnkj
或1234567891011125abcdefghijk
(可混)
DONT MATCH:abababababab123
或12345678910111213abc
剛剛擺脫尾隨量詞和使用錨匹配字符串的開頭和結尾:
/^(\d{0,16}\w{0,11})$/
其中^
匹配字符串的開始,$
匹配字符串的結尾。現在這將匹配0-16個字符的字符串,然後是0-11個字符。請記住\w
包括[A-Za-z0-9_]
,如果你想只匹配字母字符,你可以這樣做:
/^(\d{0,16}[a-z]{0,11})$/i
編輯:由於(顯然)數字和字符可以混合使用,可以使用一個正則表達式來測試無效字符,然後做一些額外的處理,以確定是否爲每個字符類的最低要求得到滿足與另一個正則表達式,像這樣:
首先是檢查是否字符串包含任何無效字符。如果這個匹配,我們知道該字符串是無效:
if(preg_match('/[^\d\w]/', $input)) {
echo "Invalid input - Only digits and characters allowed.\n";
}
注:上述假設\w
的字符,只有字母字符,使用A-Za-z
。
如果上面的檢查通過了,現在我們知道該字符串只包含數字和字符,我們通過用空字符串替換所有數字來檢查它是否有足夠的字符,並檢查其餘字符只有那些在\w
系列)是正確的長度。注意使用按引用$count
參數,這裏命名$replacements
,這將隱式告訴我們有多少個數字出現在字符串中,而我們正在檢查多少字符的字符串:
$only_characters = preg_replace('/\d/', '', $input, -1, $replacements);
if(strlen($only_characters) > 11) {
echo "Invalid input - You can only have at most 11 characters\n";
}
if($replacements > 16) {
echo "Invalid input - You can only have at most 16 digits\n";
}
我不認爲你想要的東西可以通過REGEX輕鬆或高效地完成。根據我的理解你的問題,你希望有效的字符串最長爲27個字符,並且只包含數字和字符(由正則表達式\w
定義),最多隻有16個數字和11個字符。
要做到這一點,最好的辦法是運行一些測試。
/[\d\w]{0,27}/
/\d/
然後計算匹配數/\w/
然後計算匹配的數量我沒有看到任何包裝成一個正則表達式的好處。
N.B.正如@nickb指出的那樣,\w
類包含\d
類,這樣看來,你必須定義自己的角色職業,而不是使用\w
- 像[a-zA-Z_]
相匹配整個拉丁美洲(不對外重音字符)字母字符和下劃線。
數字和數字可以混合使用嗎?當然是 – 2012-08-07 15:07:23
!你可以混合它! – trouble 2012-08-08 07:28:08
它可以匹配'123abc456def'嗎? – 2012-08-08 08:03:09