检查 php 字符串是否只包含来自欧洲语言的字符

Check if php string only contains characters from an european language

我想检查一个字符串是否只包含欧洲常见的字符、数字和特殊字符。我找到了类似 How to check, if a php string contains only english letters and digits? 的答案,但这不包括法语 é 和 è 或德语 äöüß 或罗马尼亚语 ă。我还想允许经常使用特殊字符,如 €、!"§$%&/()=#|<>

有人有完整的集合,其中包含所有这些字符以供检查吗?

不在 a-z 和 A-Z 中的字符为:

[^a-zA-Z]

所以你可以使用类似的东西:

Regex_CountMatches([String_Field],"[^a-zA-Z]")

因为这个函数有大小写选项(默认值 1 不区分大小写),搜索 [^a-z] 也可能有效。

我想你可以使用正则表达式

$re = '/[A-Za-z0-9]*/m';
$str = 'человек';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
var_dump($matches);

您可以使用 \p{Latin} 测试拉丁字符,确保使用 u 正则表达式标志:

<?php
$tests = [
    'éèäöüßäöüßäöüßäöü',
    'abcdeABCDE',
    '€, !"§$%&/()=#|<>',
    'ÄäAa',
    '*',
    'Здравствуйте'
];

foreach ($tests as $test) {
    if (!preg_match('/[^\p{Latin}0-9€, !"§$%&\/()=#|<>]/u', $test)) {
        echo "$test is okay\n";
    }
}

打印:

éèäöüßäöüßäöüßäöü is okay
abcdeABCDE is okay
€, !"§$%&/()=#|<> is okay
ÄäAa is okay