虽然有很多关于非英语字符正则表达式问题的问题,但我无法找到有效的答案。而且,似乎没有任何简单的 PHP 库可以帮助我过滤非英语输入。
您能否建议我一个允许的正则表达式
- 所有英文字母字符 (abc...)
- 所有非英语字母字符(šýüčá...)
- 空格
- 不区分大小写
验证和清理。本质上,我希望当输入包含除上述 4 点之外的任何内容时 preg_match 返回 false,或者 preg_replace 删除除这 4 个类别之外的所有内容。
我能够创建
'/^((\p{L}\p{M}*)|(\p{Cc})|(\p{Z}))+$/ui'
来自 http://www.regular-expressions.info/unicode.html 。此正则表达式在验证输入时效果很好,但在清理输入时效果不佳。
编辑:
用户输入“český [jazyk]”作为输入。在 preg_match 中使用 '/^[\p{L}\p{Zs}]+$/u'
,脚本确定字符串包含不允许的字符(在本例中为 '[' 和 '] ')。接下来我想使用 preg_replace 来删除那些不需要的字符。我应该将什么正则表达式传递给 preg_replace 来匹配上述正则表达式未指定的所有字符?
最佳答案
我认为您所需要的只是一个字符类,例如:
^[\p{L}\p{Zs}]+$
这意味着:整个字符串(或行,带有 (?m)
选项)只能包含 Unicode 字母或空格。
看看 demo .
$re = "/^[\\p{L}\\p{Zs}]+$/um";
$str = "all english alphabet characters (abc...)\nall non-english alphabet characters (šýüčá...)\nspace s\nšýüčá šýüčá šýüčá ddd\nšýüčá eee 4\ncase insensitive";
preg_match_all($re, $str, $matches);
要删除所有非 Unicode 字母或空格的符号,请使用以下代码:
$re = "/[^\\p{L}\\p{Zs}]+/u";
$str = "český [jazyk]";
echo preg_replace($re, "", $str);
sample program 的输出:
český jazyk
关于php - 用于验证和清理 PHP 中所有英语和非英语 unicode 字母字符的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29817993/