只允许字母,数字和一些外国字母?

时间:2015-11-22 16:29:55

标签: php regex preg-replace

我只想让用户使用字母,数字和一些外国字母。这有效,但它删除了外国字母(如öçşğ)。

preg_replace('/[^a-zA-Z0-9\s]/', '', $nick)

所以我在下面使用了一些外国字母,但它仍然删除了外国字母。

preg_replace("@[^A-Za-z0-9\- şıüğçİŞĞÜÇ]+@i","",$nick);

允许他们的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

当您想使用特定于语言的字符时,您可以使用以下构造,这比在正则表达式中编写您的语言的所有特定字符更容易理解:

preg_replace("/[^\w\p{Latin}]+/", '', 'Öm$ür Y_ağız');

将“拉丁语”替换为http://php.net/manual/en/regexp.reference.unicode.php

中您自己的unicode字符集

答案 1 :(得分:1)

关闭。只需要u(PCRE_UTF8)修饰符,你就错过了字母“ö”;)

preg_replace("@[^A-Za-z0-9\-\sşıüöğçİŞĞÜÖÇ]+@iu", '', 'Öm$ür Y_ağız');

返回Ömür Yağız

未经测试,但您可以将正则表达式简化为:

@[^a-z0-9şıüöğçİ -]@iu