2015-06-17 12 views
0

我試圖取代表情符號和其他字符,如♥沒事上的輸入KEYUP:需要從輸入刪除的表情符號的簡單的圖標用JavaScript

'keyup': function() { 
    this.value = this.value.replace(/\W+/g, ''); 

我想與口音的所有字符通過。我還想要標點符號。只有emojis和象♥這樣的符號應該被替換。

+0

「我想與口音通過所有字符。」你會有一段糟糕的時光。最常見的[UTF-8字符序列](https://en.wikipedia.org/?title=UTF-8#Description)以二進制「110」開頭,它與大多數代碼頁中的重音字符相對應。區分單字節重音字符和UTF-8序列的起始字節將具有挑戰性。 –

+0

@ Mr.Llama:這是JavaScript - JavaScript中的字符串是一系列16位代碼單元。源頁面的編碼在這裏是不相關的,因爲源代碼中的字符串在JavaScript中被邏輯視爲UCS-2/UTF-16字符串。 – nhahtdh

+0

@nhahtdh - 嗯,今天我學到了一些新東西!謝謝你的提示! –

回答

2

您可以通過執行使用相對來說你的正則表達式:

'keyup': function() { 
    this.value = this.value.replace(/[^\w.,\s]/g, ''); 
      Replace those that are not --^ 
      words, dots, comma, spaces... 

Regular expression visualization

然後添加你要允許在字符類的字符。我留下了字母_,.,,和空格,但您可以添加您認爲有效的內容。

發現的波蘭字符這些列表:

Ą \u0104 
Ć \u0106 
Ę \u0118 
Ł \u0141 
Ń \u0143 
Ó \u00D3 
Ś \u015A 
Ź \u0179 
Ż \u017B 
ą \u0105 
ć \u0107 
ę \u0119 
ł \u0142 
ń \u0144 
ó \u00F3 
ś \u015B 
ź \u017A 
ż \u017C 

所以,你可以使用此代碼,允許過拋光字符:

'keyup': function() { 
    this.value = this.value.replace(/[^\w.,\s\u0104\u0106\u0118\u0141\u0143\u00D3\u015A\u0179\u017B\u0105\u0107\u0119\u0142\u0144\u00F3\u015B\u017A\u017C]/gu, ''); 

Regular expression visualization

用JavaScript匹配的Unicode可能不像我們想象的那樣直截了當,所以在this like你可以查看更深的exp lanation。

有關使用正則表達式匹配的unicode代碼示例是:

/foo.bar/.test('foobar') 
// false 

/foo.bar/u.test('foobar') // Notice the `u` (unicode flag) 
// true 

更新:如CLaFarge指出在他的評論,如果你需要的Unicode塊表情符號的範圍是1F600-1F64F

+0

這看起來不錯,但是波蘭語è這樣的字符也應該被允許 – beingalex

+0

@beingalex我明白了,好點...我不記得unicode正則表達式夠好,但是您應該查找用於字符類的unicode範圍 –

+0

@beingalex更新了我的答案,對波蘭人來說應該也可以。 –

0

隨着XRegExp library Unicode plugin ,你可以在JavaScript中使用Unicode字符類。

\p{S}符合所有符號。

var regexp = XRegExp('[\\p{S}\\p{C}]'); 
this.value = XRegExp.replace(this.value, regexp, ''); 

以下兩類字符的定義:

{ 
    L: "Letter", 
    Ll: "Lowercase_Letter", 
    Lu: "Uppercase_Letter", 
    Lt: "Titlecase_Letter", 
    Lm: "Modifier_Letter", 
    Lo: "Other_Letter", 
    M: "Mark", 
    Mn: "Nonspacing_Mark", 
    Mc: "Spacing_Mark", 
    Me: "Enclosing_Mark", 
    N: "Number", 
    Nd: "Decimal_Number", 
    Nl: "Letter_Number", 
    No: "Other_Number", 
    P: "Punctuation", 
    Pd: "Dash_Punctuation", 
    Ps: "Open_Punctuation", 
    Pe: "Close_Punctuation", 
    Pi: "Initial_Punctuation", 
    Pf: "Final_Punctuation", 
    Pc: "Connector_Punctuation", 
    Po: "Other_Punctuation", 
    S: "Symbol", 
    Sm: "Math_Symbol", 
    Sc: "Currency_Symbol", 
    Sk: "Modifier_Symbol", 
    So: "Other_Symbol", 
    Z: "Separator", 
    Zs: "Space_Separator", 
    Zl: "Line_Separator", 
    Zp: "Paragraph_Separator", 
    C: "Other", 
    Cc: "Control", 
    Cf: "Format", 
    Co: "Private_Use", 
    Cs: "Surrogate", 
    Cn: "Unassigned" 
} 
相關問題