虽然关于非英文字符正则表达式问题有很多问题,但我找不到合适的答案。此外,似乎没有任何简单的PHP库可以帮助我过滤非英语输入。
请你给我一个正则表达式,允许
验证和消毒。基本上,我希望preg_match在输入包含除上述4个点以外的任何内容时返回false,或者preg_replace除去这4个类别之外的所有内容。
我能够创造
来自http://www.regular-expressions.info/unicode.html的'/^((\p{L}\p{M}*)|(\p{Cc})|(\p{Z}))+$/ui'
。这个正则表达式在验证输入时效果很好,但在清理时却不行。
编辑:
用户输入'český[jazyk]'作为输入。在preg_match中使用'/^[\p{L}\p{Zs}]+$/u'
,脚本确定该字符串包含不允许的字符(在本例中为'['和']')。接下来我想使用preg_replace来删除那些不需要的字符。我应该将什么正则表达式传递给preg_replace以匹配上述正则表达式未指定的所有字符?
答案 0 :(得分:3)
我认为你需要的只是一个角色类:
,
这意味着:整个字符串(或带有^[\p{L}\p{Zs}]+$
选项的行)只能包含Unicode字母或空格。
查看demo。
(?m)
要删除非Unicode字母或空格的所有符号,请使用以下代码:
$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);
sample program的输出:
$re = "/[^\\p{L}\\p{Zs}]+/u";
$str = "český [jazyk]";
echo preg_replace($re, "", $str);