單字符匹配可以用一個字符類,類似於做什麼,你已經嘗試:
[a-zA-Z0-9\-&'./]
你可以這樣指定,可以有大於或等於一個任意數量這些字符後加上+
即可。但是由於您要驗證的長度不應超過255個字符,因此您可以使用明確的量詞來執行此操作:{0,255}
允許從零到255的任何長度。請注意,連字符會被轉義,因爲它具有特殊含義一個角色類。您可以使用i
修飾符使該模式不區分大小寫,從而使其更簡單一些。
匹配單個空間的要求是一個小更復雜,有幾種方法可以完成,但既然你也說你想要規範化這些到一個空間,我建議你先這樣做所以爲了簡單起見,你可以給角色類添加空間。這可以很容易地與另一個正則表達式來完成:
/ +/
這1個或多個空格字符的每個塊匹配,所以你然後只需用一個空格替換所有的匹配。
既然您知道該字符串只包含單個空格,您可以通過使用^
和$
主題斷言的開始和結束簡單地聲明整個字符串僅包含列表中的字符。所以,把他們放在一起,你會得到這樣的事情:
// Replace all space blocks to a single space
$normalizedSpace = preg_replace('# +#', ' ', $input);
// Validate the input contains only the chars you want
if (!preg_match('#^[a-z0-9\-&\'./ ]{0,255}$#i', $normalizedSpace)) {
// Data invalid, handle error here
} else {
// If you get here the data is valid
$validData = trim($normalizedSpace);
}
我懷疑你也將要trim()
數據爲好,儘管這可能並非如此。
到目前爲止您提出了什麼模式? – PeeHaa
是的可能:)你可以嘗試一些,然後人們會幫助你 – 2013-04-02 11:31:23
當然,我的正則表達式是絕對廢話 - 我得到這個:/([a-zA-Z0-9])/但它只檢查第一個字符 - 抱歉我的愚蠢:(任何首發與解釋將是有用的,不需要整個解決方案,如果它需要很多時間:) – user1197220