2013-06-13 85 views
25

我的php我使用preg_match來驗證輸入文本。PHP只允許使用pregmatch的字母,數字,空格和特定符號

if(preg_match('/^[a-zA-Z0-9]+$/', $firstname)) { 
} 

但是,這隻允許字母數字和不允許空格。我想要允許空格,字母和數字。和期間(。)和短劃線( - )

請幫我一下嗎?提前致謝。

+0

剛剛嘗試添加都在你的正則表達式(也意味着如羅馬數字)

。 – Rikesh

回答

30

使用

preg_match('/^[a-z0-9 .\-]+$/i', $firstname) 
+1

謝謝,我相信這是我所需要的 – CudoX

+0

不客氣。 – Baba

+0

作爲一項規則,我傾向於避免簡單地在正則表達式中使用空格(因爲它實際上可以代表許多不同的字符,具體取決於編碼你的編輯器),並通過使用'\ 040'明確。 – HorusKol

2

這裏唯一的困難位是衝刺。

對於空間和點,你可以簡單地將它們添加到您的字符類,像這樣:

'/^[a-zA-Z0-9 .]+$/' 

容易。

由於連字符在像這樣的字符類中具有特殊含義(正如您已經知道的,它們用於範圍字符如a-z),短劃線會稍微難一些。爲了在字符類中指定連字符,它必須是類中的第一個字符(即它不能在兩個字符之間,否則將被視爲字符範圍標記)。

所以,你的表達應該是:

'/^[-a-zA-Z0-9 .]+$/' 

希望有所幫助。

+0

是的,這有幫助。現在我甚至可以進一步理解preg_match函數的正確語法。 – CudoX

+3

如果你想國際化,爲什麼不使用'\ p {N}'而不是'0-9' –

14

如果你不僅要允許ASCII,然後使用Unicode properties

preg_match('/^[\p{L}\p{N} .-]+$/', $firstname) 

\p{L}任何語言的任何字母,也符合中國,希伯來語,阿拉伯語,...字符。

\p{N}任何數字字符,如果你想限制爲數字,然後用\p{Nd}

+1

來逃避它這將是一致的, –

+0

@CasimiretHippolyte,當然可以使用'\\' – stema

+2

我相信你應該添加一個'u'修飾符,如果這是爲了在PHP中正常工作。像這樣: preg_match('/^[\ p {L} \ p {N} .-] + $/u',$ firstname) – Larpon

相關問題