2011-06-07 85 views
3

我想正則表達式來淨化我的數據,應符合以下條件這種情況的正則表達式是什麼?

a) a-z and A-Z allowed 

b) 0-9 allowed 

c) Special Symbols like Comma (,) dot (.) question Mark (? allowed) 

d) Single Space is allowed 

我想和這個

preg_replace('%[^a-zA-Z0-9,.?\s]%', '', $string); 

上來我不是那麼熟悉正則表達式,雖然上面的代碼作品,我想知道

a)如果我使用正確的RegExp 語法?

二)如果我不會在 開始和結束的語法也不會 工作中使用modulus(%),我已經不知道什麼是模數這裏的 目的是什麼?

回答

1

a)如果有效,那是正確的。

b)中「當使用PCRE函數,它要求該圖案由分隔符包圍的分隔符可以是任何非字母數字的,非反斜槓,非空白字符」 - 從PHP Documentation

+0

哦,所以你的意思是說我可以使用任何其他符號,例如*($ etc代替模數。哇,這真棒,在preg_match()ealier我已經使用了'/^[0-9] $ /'所以這裏的兩個正斜槓服務於相同的目的嗎? – 2011-06-07 05:15:24

+1

@Ibrahim Azhar阿瑪,是的在正確的。有用的情況下,你想匹配一個字符,你可能有其他需要轉義:'/^[0-9]%$ /'vs'%^ [0-9] \%$%' – 2011-06-07 05:17:20

2

如果你需要的是允許任何單個空格(其中包括空格,換行符,水平製表符,垂直製表符,換頁等),那麼你的正則表達式是正確的。但是,如果您只想允許空格,請將\s更改爲。 調用preg_replace會從輸入中刪除所有不允許的字符。

呼叫preg_replace中的%用作正則表達式分隔符。 preg_函數家族期望正則表達式位於一對分隔符中。 My answer here talks more on what can be used as delimiters

+0

我試圖編輯這是爲了澄清\'\'是單個空格字符,但是SO的黑客入侵「Markdown」解析器吞噬了整個轉義空間。我之前與傑夫進行過戰鬥,試圖修復MD分析器中的錯誤,但都無濟於事;所以我只會注意到我嘗試過。 – eyelidlessness 2011-06-07 05:50:53

1

\ s是一個空格字符。其中包括選項卡。

另外,如果你可以讓下劃線,\ W可能會使它簡單一點

\w = [a-zA-Z0-9_] // \w is a "word" character (including underscores) 
+0

\ w聽起來不錯,而不是a-zA-z,這是否也包括0-9? – 2011-06-07 05:22:07

+0

\ w包含什麼? – 2011-06-07 05:23:34

+0

@Ibrahim,是的,'\ w'等效於'[a-zA-Z0-9_]'(小寫字母,大寫字母,數字和下劃線)。 – eyelidlessness 2011-06-07 05:52:42

0

你需要逃脫點,逗號,問號

[^a-zA-Z0-9\,\.\?\s]

+0

我明白轉義,但如果你向我解釋爲什麼我應該逃避它,我將不勝感激?它可以很好地工作而不會逃脫它 – 2011-06-07 05:26:04

+0

點(。)與任何字符匹配。所以它可能會產生問題。但是,在這種情況下,可能不需要轉義,因爲它位於方括號內。 – 2011-06-07 05:33:39

+2

不正確。點&?在字符類內部按字面進行處理。 – codaddict 2011-06-07 05:39:16