我正在尝试替换表情符号中的表情符号和其他字符,如输入的密钥输出中没有任何内容:
'keyup': function() {
this.value = this.value.replace(/\W+/g, '');
我希望所有带重音的角色都能通过。我也希望标点符号通过。只应替换表情符号和♥等符号。
答案 0 :(得分:2)
您可以通过以下方式使用相反的正则表达式:
'keyup': function() {
this.value = this.value.replace(/[^\w.,\s]/g, '');
Replace those that are not --^
words, dots, comma, spaces...
然后在字符类中添加要允许的所有字符。我将字母_
,.
,,
和空格留作有效,但您可以添加您认为有效的字母。
找到这些波兰人物名单:
Ą \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, '');
使用javascript匹配unicode可能不像我们想象的那么简单,因此在 this like 中,您可以查看更深入的解释。
关于将unicode与正则表达式匹配的代码示例是:
/foo.bar/.test('foobar')
// false
/foo.bar/u.test('foobar') // Notice the `u` (unicode flag)
// true
更新:如果 CLaFarge 在评论中指出,如果您需要表情符号的unicode块,则范围为1F600-1F64F
答案 1 :(得分: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"
}