php - 用于验证和清理 PHP 中所有英语和非英语 unicode 字母字符的正则表达式

标签 php regex

虽然有很多关于非英语字符正则表达式问题的问题,但我无法找到有效的答案。而且,似乎没有任何简单的 PHP 库可以帮助我过滤非英语输入。

您能否建议我一个允许的正则表达式

  1. 所有英文字母字符 (abc...)
  2. 所有非英语字母字符(šýüčá...)
  3. 空格
  4. 不区分大小写

验证和清理。本质上,我希望当输入包含除上述 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/

相关文章:

php - Mysql - 重复 key 更新不适用于 2 个 key

php - 限制多个函数中的数据库调用次数

javascript - JS 正则表达式删除类型转换

php - 在跳过缩写的同时将驼峰大小写格式化为可读的 PHP

php - 用于解析 float 、小数、 double 的 MySQL 列类型的正则表达式

javascript - 在正则表达式中拆分变量值

第一行 < 和 "!"的 Java 正则表达式

php - 多次回显一个 PHP 变量

php - MySQL超时错误

php - friend 关系用mysql?