我在这里解决这个问题:Regex for removing special characters on a multilingual string:
/\P{Xan}+/u
但这似乎是针对PHP的,我对正则表达式并不擅长,那么javascript等于什么呢?
当我在示例答案中使用正则表达式时,我得到一个无效的表达式错误,告诉我有一个无效的转义?
search(event) {
const length = (string) => {
if (string.length > 1) {
return true;
}
return false;
};
const trim = (string) => {
if (string.trim() !== '') {
return true;
}
return false;
};
const keyType = (string) => {
const regex = /\P{Xan}+/u;
if (!regex.exec(string)) {
return true;
}
return false;
};
const text = this.searchListParams.searchText;
if (length(text) && trim(text) && keyType(text)) {
this.searchSubject.next(this.searchListParams);
} else {
this.mediaListParams.startRow = 0;
this.listSubject.next(this.mediaListParams);
}
}
答案 0 :(得分:1)
PHP中的/\P{Xan}+/u
模式匹配任何不是Unicode字母或数字的1个字符。
如果您需要支持任何浏览器或JS实现,请使用XRegExp
和匹配除Unicode字母([^\pL\pN]+
)和数字({{之外的任何1个字符的\pL
模式1}}):
\pN

var rx = XRegExp("[^\\pL\\pN]+", "g");
var s = "8੦৪----Łąka!!!!Вася, *** ,Café";
var res = XRegExp.replace(s, rx, ' ')
console.log("'"+s+"'", "=>", "'"+res+"'");

如果您计划仅支持与ECMAScript 2018兼容的实施,则可以使用此原生正则表达式:
<script src="https://cdnjs.cloudflare.com/ajax/libs/xregexp/3.2.0/xregexp-all.min.js"></script>
&#13;
const rx = /[^\p{L}\p{N}]+/gu;
const s = "8੦৪----Łąka!!!!Вася, *** ,Café";
let res = s.replace(rx, " ");
console.log(`'${s}' => '${res}'`)
修饰符对于在ES2018正则表达式中启用Unicode类别类支持非常重要。
答案 1 :(得分:0)
我不熟悉PHP语法,但在JavaScript中,大括号{}
用作quantifiers。这可能会导致您的错误。
话虽这么说,PHP正则表达式在JavaScript中的含义与在PHP中的含义不同。不幸的是,AFAIK没有预定义的字符类,相当于你在JavaScript中提供的PHP正则表达式,所以我认为我不能提供正则表达式来明确地解决你的问题。
然而,在this answer中建议使用一种不在JS中使用正则表达式的创造性潜在解决方案,但它仅适用于基于拉丁语的字母(带大写的语言),仅适用于单词字符(不是数字) 。这是一个基本的实现(从链接的答案修改):
function removeSpecials(str) {
var lower = str.toLowerCase();
var upper = str.toUpperCase();
var res = "";
for(var i=0; i<lower.length; ++i) {
// test if character or numeric using capitalization test
if(lower[i] != upper[i] || /\d/.exec(lower[i]))
res += str[i];
}
return res;
}