繁体   English   中英

Typescript中的正则表达式错误不匹配点

[英]Regex error in Typescript not matching dot

我正在使用此正则表达式来验证仅允许一个点和数字的输入字段。 它与javascript完美兼容。 但是,将其与打字稿一起使用时,它仅接受数字,并且在匹配时为dot(。)提供null。

这是我的正则表达式对象:

RegExp = new RegExp(/^[0-9]*\.?[0-9]*$/g)

这就是我使用它的方式。

@HostListener('keydown', [ '$event' ])
onKeyDown(event: KeyboardEvent) {
    if (this.specialKeys.indexOf(event.key) !== -1) {
        return;
    }
    let current: string = this.changeRate.nativeElement.value;
    let next: string = current.concat(event.key);
    console.log(next+" : "+String(next).match(this.regex)+" : " +event.key);
    if (next && !String(next).match(this.regex)) {
        event.preventDefault();
    }
}

此语法是错误的: RegExp = new RegExp(/^[0-9]*\\.?[0-9]*$/g)

你要么写

  • this.regex = /^[0-9]*\\.?[0-9]*$/g

要么

  • this.regex = new RegExp("^[0-9]*\\\\.?[0-9]*$", "g") (在字符串中使用\\\\.正确输出\\.

我假设打字稿在幕后做了一些事情,试图以第二种方式对其进行解析,并且它正在转义. 而不是直接写\\.

这里的TypeScript没有什么特别的(毕竟TypeScript只是带有类型注释的JavaScript)。 引用MDN: RegEx

有两种创建RegExp对象的方法: 文字符号和构造函数 为了指示字符串,文字符号的参数不使用引号,而构造函数的参数则使用引号。

以下三个表达式创建相同的正则表达式:

/ab+c/i;
new RegExp('ab+c', 'i');
new RegExp(/ab+c/, 'i');

和:

使用构造函数时,需要正常的字符串转义规则(当包含在字符串中时,在特殊字符前加\\)。 例如,以下等同:

var re = /\w+/;
var re = new RegExp('\\w+');

但是,您的实际问题是,看起来您使用了Regex类名作为变量名。 否则,您的正则表达式定义就可以了。

 var regex = new RegExp(/^[0-9]*\\.?[0-9]*$/g); const str = `1.1`; let m; while ((m = regex.exec(str)) !== null) { // This is necessary to avoid infinite loops with zero-width matches if (m.index === regex.lastIndex) { regex.lastIndex++; } // The result can be accessed through the `m`-variable. m.forEach((match, groupIndex) => { console.log(`Found match, group ${groupIndex}: ${match}`); }); } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM