2017-08-25 37 views
2

我正在研究JavaScript應用程序,它要求我確定「任何可見的Unicode字母字符,數字(0-9),空格,下劃線和句點」的集合。建議的正則表達式模式是^[0-9\\p{L} _\\.]+$,但這似乎不適用於JavaScript。給我麻煩的部分是「任何可見的Unicode字母字符」,因爲它包含非英文字符。是否有一些可識別Unicode字母字符集的JavaScript正則表達式模式?任何可見的Unicode字母字符的JavaScript正則表達式模式

+1

您的模式在XRegExp中有效。 –

+0

什麼是「任何可見的Unicode字母字符」?所有的Unicode字母?請參閱[本演示](https://jsfiddle.net/jqyu47qo/)。 –

+0

感謝大家,這個演示看起來像XRegExp會做的伎倆。如果你很好奇,我正在嘗試驗證英雄聯盟網站的召喚師名字。這是他們定義爲「任何可見的Unicode字母字符,數字(0-9),空格,下劃線和句點的全套字符」https://support.riotgames.com/hc/en-us/articles/ 201752814 - 召喚師 - 名稱 - FAQ#h1q5 – Andrew

回答

1

使用XRegExp庫來解析當前的正則表達式:

var pattern = new XRegExp("^[0-9\\p{L} _.]+$"); 
 
var s = "123 Московская Street."; 
 
if (XRegExp.test(s, pattern)) { 
 
    console.log("Valid"); 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/xregexp/3.2.0/xregexp-all.min.js"></script>

注意^[0-9\\p{L} _\\.]+$比賽

  • ^ - 字符串的開始
  • [0-9\\p{L} _\\.]+ - 一個或多個字符THA是:
    • 0-9 - ASCII數字
    • \\p{L} - 字母
    • - 空間
    • _ - 下劃線
    • . - 一個點(字符類內, .與字面點匹配,無需轉義)
  • $ - 字符串結尾。

如果你想還包括以下幾種情況:

  • 名稱必須是至少3個字符長,不超過16個字符長。
  • 沒有玩家的名字可以在其中包含「暴亂」一詞。

您可能的圖案延伸到以下:

var pattern = new XRegExp("^(?!.*\\bRiot\\b)[0-9\\p{L} _\\.]{3,16}$"); 
          ^^^^^^^^^^^^^^^^    ^^^^^^ 

其中+(1個或多個)替換{3,16}限制性量詞(3〜16次)和(?!.*\\bRiot\\b)負先行將失敗比賽如果有整個單詞(由於\\b字邊界)Riot位於字符串(或行,因爲.匹配任何字符但是換行符字符)內的任何位置。

相關問題