中文/日文字母的正则表达式

时间:2016-01-30 13:25:49

标签: php regex

Okai所以我已经拥有regular expression我网站上允许的姓名。 但是,我还希望添加其他名称使用的可能字母。 有人有一个好regex或知道如何让这更完整吗?我已经搜索了很长一段时间,但我找不到任何适合我需要的东西。

这是我目前用于检查姓名的regex

$regex = "/^([a-zA-ZàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýżźñçčšžÀÁÂÄÃÅĄĆČĖĘÈÉÊËÌÍÎÏĮŁŃÒÓÔÖÕØÙÚÛÜŲŪŸÝŻŹÑßÇŒÆČŠŽ∂ð ,.'-])+$/";
if(preg_match($regex, $fullname)){
    // do something
}

1 个答案:

答案 0 :(得分:4)

正如Lucas Trzesniewski所提到的,\p{L}将包含[a-zA-Z],因此我已从模式中移除。

因此,组合您在示例中包含的字符列表;模式将如下所示/^[\p{L}\s,.'-]+$/u

^[]+$匹配从开始到结束的字符串,因此+也意味着需要匹配一个或多个

\p{L}匹配unicode字符

\s,.'-匹配空格,逗号,句号,单引号和短划线

u PCRE_UTF8修饰符,此修饰符会启用与Perl不兼容的PCRE的其他功能。

if(preg_match("/^[\p{L}\s,.'-]+$/u", "お元気ですか你好吗how are you你好嗎,.'-") === 1) {
    echo "match";
}
else {
    echo "no match";
}

// match

if(preg_match("/^[\p{L}\s,.'-]+$/u", "お元気ですか你好吗how are you你好_嗎-,.'") === 1) {
    echo "match";
}
else {
    echo "no match";
}

// no match as there are underscore in 你好_嗎