我想要一個只接受字母和一個連字符的正則表達式。該值必須以5(5和1連字符)開始,之後只有5-15個數字。PHP:preg_match - >數字和一個連字符
我目前使用:preg_match('/^[5]-{1}[\0-9]{5,15}$/', $_POST['value'])
有效值爲:5-123456789
我正則表達式接受兩個連字符像5--123456789。它必須以5,一個連字符和5-15個數字開頭。我應該怎麼做?
在此先感謝!
我想要一個只接受字母和一個連字符的正則表達式。該值必須以5(5和1連字符)開始,之後只有5-15個數字。PHP:preg_match - >數字和一個連字符
我目前使用:preg_match('/^[5]-{1}[\0-9]{5,15}$/', $_POST['value'])
有效值爲:5-123456789
我正則表達式接受兩個連字符像5--123456789。它必須以5,一個連字符和5-15個數字開頭。我應該怎麼做?
在此先感謝!
問題是你指定了錯誤的數字:[\0-9]
匹配索引在零和9
之間的任何字符 - 以ASCII字符表示索引爲0到57的字符。連字符的索引爲45,所以它是允許。發生這種情況是因爲\0
被解釋爲octal escape序列。
您應該使用[0-9]{5,15}
或\d{5,15}
來代替。你也可以在一定程度上簡化正則表達式; /^5-\d{5,15}$/
正確且較短。
您在0之前使用\,表示它不是範圍0-9,而是0和-9,所以這是您的第二個連字符(但是它是可選的,因爲在括號[]中)。從括號中刪除這個\。離開這樣的:
preg_match('/^[5]-{1}[0-9]{5,15}$/', $_POST['value'])
即使這個符號是正確的:
preg_match('/^5-[0-9]{5,15}$/', $_POST['value'])
「0和-9」?這是什麼意思? – Jon
在這種情況下,它有點竅門。正如Jon在他的編輯中所描述的那樣,實際上'\ 0'映射到ASCII值零。所以'-'仍然被解釋爲一個範圍。 –
爲什麼'[0-9]'錯了嗎? – Treps
@Treps:'[0-9]'沒有錯,但'[\ 0-9]'(額外的反斜槓)是。 – Jon
Ahaaaa!它的工作順便說一句。好,我可以使用'[0-9]'和'\ d'。 :)你是否也知道如何構建一個正則表達式,其中包含字母和數字以及{5,15}'。它應該接受大寫或小寫字母,但它必須包含字母,數字和「{5,15}」。 – Treps