用于删除多语言字符串javascript上的特殊字符的正则表达式

时间:2018-05-16 23:34:27

标签: javascript regex

我在这里解决这个问题: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);
    }
}

2 个答案:

答案 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;
&#13;
&#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;
}