[英]Regex for validating and sanitizing all english and non-english unicode alphabet characters in PHP
盡管有很多關於非英語字符正則表達式的問題,但我仍然找不到有效的答案。 而且,似乎沒有任何簡單的PHP庫可以幫助我過濾非英語輸入。
你能建議我一個正則表達式嗎
在驗證以及消毒方面。 本質上,當輸入包含上面4個點之外的任何內容時,我希望preg_match返回false,或者讓preg_replace擺脫除這4個類別之外的所有內容。
我能夠從http:// www創建'/^((\\p{L}\\p{M}*)|(\\p{Cc})|(\\p{Z}))+$/ui'
.regular-expressions.info / unicode.html 。 此正則表達式在驗證輸入時很有效,但在清理輸入時效果不佳。
編輯:
用戶輸入“český[jazyk]”作為輸入。 在preg_match中使用'/^[\\p{L}\\p{Zs}]+$/u'
,腳本確定字符串包含不允許的字符(在這種情況下為'['和']')。 接下來,我想使用preg_replace刪除那些不需要的字符。 我應該將什么正則表達式傳遞給preg_replace才能匹配上述正則表達式未指定的所有字符?
我認為您所需要的只是一個字符類,例如:
^[\p{L}\p{Zs}]+$
這意味着:整個字符串(或帶(?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);
要刪除所有不是Unicode字母或空格的符號,請使用以下代碼:
$re = "/[^\\p{L}\\p{Zs}]+/u";
$str = "český [jazyk]";
echo preg_replace($re, "", $str);
示例程序的輸出:
český jazyk
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.