簡體   English   中英

正則表達式,用於驗證和清除PHP中的所有英語和非英語unicode字母字符

[英]Regex for validating and sanitizing all english and non-english unicode alphabet characters in PHP

盡管有很多關於非英語字符正則表達式的問題,但我仍然找不到有效的答案。 而且,似乎沒有任何簡單的PHP庫可以幫助我過濾非英語輸入。

你能建議我一個正則表達式嗎

  1. 所有英文字母字符(abc ...)
  2. 所有非英語字母字符(šýüčá...)
  3. 空間
  4. 不區分大小寫

在驗證以及消毒方面。 本質上,當輸入包含上面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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM