簡體   English   中英

如何在防止特殊字符的同時允許所有語言的常規字母/字符(在字符串中)

[英]How to allow regular letters/characters of all languages (in a string) while prevent special characters

首先,這不是重復的(據我所知)。

我真正想要的是允許用戶擁有一個僅包含有效字符的用戶名(個人資料名稱),在我的情況下,這些字符是所有語言的字母以及空格。 但同時防止數字、符號(如?@#$%^&*()|\/;'":.=+-_,<>,~ )、其他不常見的符號(如©®♣♥♠♩¸¸♪·¯·♫ )、換行符、制表符和類似字符、表情符號以及名稱中不常見的每個字符...

好吧,為了更清楚,我想實現與 Facebook 完全相同的配置文件名稱系統。

我正在使用 JS(節點),到目前為止我嘗試了正則表達式,但我認為在該表達式中鍵入 unicode 中的每個有效字符范圍是不明智的嗎? 當我需要編輯這些范圍時,我什至不會嘗試考慮這會對我造成什么影響......

有沒有圖書館可以提供一種方法來做到這一點? 如果沒有,我還有什么其他選擇?

任何幫助表示贊賞!

僅對於英語,您可以使用簡單的字符 class 例如/^[a-zA-Z ]$/或單詞 char /^[\w ]$/ 有一個 Unicode 等效於此:

/^[\p{L}\p{M}\p{Zs}]{2,30}$/u

解釋:

  • 使用“u”標志啟用 Unicode
  • \p{L} - 表示任何語言的字母字符
  • \p{M} - 表示一個標記(重音等)
  • \p{Zs} - 表示空格字符,例如常規空格 和日文空格字符 

如果您想在開始和結束時防止空格,請使用這些負前瞻:

/^(?!\p{Zs})(?!.*\p{Zs}$)[\p{L}\p{M}\p{Zs}]{2,30}$/u

示例 function:

function validateName(name) {
  return /^[\p{L}\p{M}\p{Zs}]{2,30}$/u.test(name);
}

請參閱https://regex101.com/r/A4QDIf/1上的演示

請參閱 Unicode 正則表達式上的文檔: https://javascript.info/regexp-unicode

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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