2013-03-19 20 views
1

我想驗證通過PHP中的POST方法正在處理的表單。傳遞的一些示例值是姓名,年齡,性別,性格類型等。無法找出這麼簡單的東西的正則表達式

爲了確定給出的用戶數據是否正確,我使用正則表達式。

例如,這裏有一些我的工作.. 名稱的那些的(只要它不是空白,它的罰款。

if (strlen($name) == 0) 對我來說這一個工作是工作另外一個是性格類型,必須是榮格個性測試類型(如ISTP,ENTP,INFP等)。我的代碼是: if (!preg_match("/[IE]{1}[NS]{1}[FT]{1}[JP]{1}/", $per))其中$ per是用戶提交的Jung個性類型。工作得很好

我遇到困難的是年齡,它必須是0-99,所以有1或2位數。就像它應該是如此簡單,但無論出於何種原因,它都不起作用。這裏的正則表達式的我曾嘗試:

/\d{1,2}/

/[0-9]{1,2}/

/(\d|\d\d)/

/([0-9]|[0-9][0-9])/

我不明白,爲什麼沒有這些會的工作,他們四個好像它將完全符合標準。也許我不理解如何正確使用正則表達式,但是我花了幾個小時仔細閱讀示例,所以我覺得它應該是正確的。

任何幫助將不勝感激,謝謝:)

編輯:如果這有助於在所有,傳遞價值「ABCDEFG」或「AB」作爲$年齡值出來作爲一個錯誤(這是正確的)。但是,傳遞「100」,「333」或「99999」的值時,會出現匹配(這是錯誤的,或者它不是我想要的)。希望這有助於解釋更多〜

+0

第一個測試根本不是正則表達式。 – 2013-03-19 21:41:11

+1

他們看起來對我有效,你怎麼知道他們不工作?發佈使用它們的代碼以及'var_dump($ the_input_string_you_are_trying_to_match);' – nickb 2013-03-19 21:41:33

+5

您正在使用正則表達式。對於第一種情況,請創建一個允許值的數組,並查看它是否在該位置。對於第二種情況,將其轉換爲數字並檢查它是否在邊界內。 – 2013-03-19 21:41:36

回答

6

如前所述,正則表達式不是正確的答案。但是如果你必須使用正則表達式,你需要啓動^並結束$錨點。正則表達式匹配字符串的一部分,所以/\d{1,2}/匹配abc123,因爲它至少有一個帶有可選第二個數字的數字。如果您希望匹配JUST這2個字符,則需要將匹配定位到字符串的開頭和結尾,如/^\d{1,2}$/,以表示「字符串的開始,一個或兩個數字,字符串的結尾」。

+0

非常感謝,真的清除它。你們都很棒:)非常感謝 – 2013-03-19 21:54:24

+2

另外,如果你正在做很多正則表達式的工作,使用其中一個在線正則表達式測試器可能會有所幫助:http://www.pagecolumn.com/tool/pregtest.htm – DavidA 2013-03-19 22:03:58