1
我需要允許在名稱只有字母和數字,但字母必須是UTF-8,因爲這將在德語,西班牙語等多國語言preg_replace函數使用UTF-8字母
我的代碼拋出UTF-8字符使用,如何解決它? 由於
$title = 'aj,o!_-z5ąśäżźŠń?56';
echo preg_replace('/[^A-z0-9-]/', '_', $title);
我需要允許在名稱只有字母和數字,但字母必須是UTF-8,因爲這將在德語,西班牙語等多國語言preg_replace函數使用UTF-8字母
我的代碼拋出UTF-8字符使用,如何解決它? 由於
$title = 'aj,o!_-z5ąśäżźŠń?56';
echo preg_replace('/[^A-z0-9-]/', '_', $title);
首先,
[A-z]
是錯誤的。千萬不要在字符類中使用範圍A-z
。
它同樣是匹配的[A-Za-z]
,加一些特殊字符,其碼點發生Z
和a
之間撒謊。如果你真的只想匹配ASCII字母,你可以使用[A-Za-z]
或[A-Z]
並設置「不區分大小寫」標誌。
至於你的問題,我認爲這是你在找什麼:
echo preg_replace('/[^\p{L}\d-]/u', '_', $title);
的/u
標誌告訴它來治療正則表達式和源字符串作爲UTF-8,它可以讓你在正則表達式中使用像\p{L}
這樣的Unicode屬性。 \d
只是一種更簡潔的方式來匹配[0-9]
(ASCII十進制數字)。根據您的需要,您可能需要使用\p{N}
(Unicode編號)或\p{Nd}
(Unicode十進制數字),但我很肯定\d
就足夠了。