越南人物的正则表达式

时间:2010-09-29 08:09:35

标签: php regex unicode diacritics

我有一个字符串,想删除下面的任何字符:

  • 不在此列表中:ÀÁÂÃÈÉÊÌÍÒÓÔÕÙÚĂĐĨŨƠàáâãèéêìíòóôõùúăđĩũơƯĂẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼỀỀỂ ưăạảấầẩẫậắằẳẵặẹẻẽềềểỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪễệỉịọỏốồổỗộớờởỡợụủứừỬỮỰỲỴÝỶỸửữựỳỵỷỹ

  • 不在[a-z 0-9 A-Z]

  • 不是:_和空格。

任何人都可以帮助我在PHP中使用这个正则表达式吗?

4 个答案:

答案 0 :(得分:6)

试试这个正则表达式:

/[^a-z0-9A-Z_ÀÁÂÃÈÉÊÌÍÒÓÔÕÙÚĂĐĨŨƠàáâãèéêìíòóôõùúăđĩũơƯĂẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼỀỀỂưăạảấầẩẫậắằẳẵặẹẻẽềềểỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪễệỉịọỏốồổỗộớờởỡợụủứừỬỮỰỲỴÝỶỸửữựỳỵỷỹ]/u

u modifier使PHP将模式字符串解释为UTF-8。

如果这不起作用,请尝试使用Unicode character properties \p{L}作为字母,或使用escape sequence \x{1234}来描述单个Unicode字符或自定义字符范围:

/[^a-z0-9A-Z_\x{00C0}-\x{00FF}\x{1EA0}-\x{1EFF}]/u

答案 1 :(得分:3)

小心点。越南Unicode字符可以“分解”为“combining characters”,其中一个代码点用于基本字符,一个或多个代码点用于附加变音符号,或者它们可以是“precomposed”到单个Unicode代码点中。结合变音符号将无法正常使用正则表达式范围[],因为无论它们与哪个基本字符组合,您都将匹配它们。

较旧版本的Unicode不包含完整的越南语预组合字符集,因此希望找到越南语,并在野外组合字符。您可以使用Unicode normalization表单C, NFC 将组合字符转换为预合成字符。

答案 2 :(得分:3)

上述正则表达式缺少ếă也是重复的。
正确的越南人物名单: àáãạảăắằẳẵặâấầẩẫậèéẹẻẽêềếểễệđìíĩỉịòóõọỏôốồổỗộơớờởỡợùúũụủưứừửữựỳỵỷỹýÀÁÃẠẢĂẮẰẲẴẶÂẤẦẨẪẬÈÉẸẺẼÊỀẾỂỄỆĐÌÍĨỈỊÒÓÕỌỎÔỐỒỔỖỘƠỚỜỞỠỢÙÚŨỤỦƯỨỪỬỮỰỲỴỶỸÝ
此外,请记住在使用正则表达式进行测试之前,以NFC格式(string.normalize('NFC'))规范化字符串。阅读更多here

答案 3 :(得分:1)

$newtext = preg_replace('/[^a-z0-9A-Z_[:space:]ÀÁÂÃÈÉÊÌÍÒÓÔÕÙÚĂĐĨŨƠàáâãèéêìíòóôõùúăđĩũơƯĂẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼỀỀỂ ưăạảấầẩẫậắằẳẵặẹẻẽềềểỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪễệỉịọỏốồổỗộớờởỡợụủứừỬỮỰỲỴÝỶỸửữựỳỵỷỹ]/u','',$text);