React原生字符串.length返回错误值

pdkcd3nj  于 2023-06-06  发布在  React
关注(0)|答案(1)|浏览(141)

我有这个功能,读取条形码,然后检查代码格式,

componentDidMount() {
    KeyEvent.onKeyDownListener((keyEvent: KeyEventProps) => {
      if (keyEvent.keyCode === 61) {
        // tab char end of code
        const barcodeType = this.getBarcodeType(this.barcode);
        if (barcodeType) {
          this.props.barcodeSubject.next({barcode: this.barcode});
        }
        this.setState({barcode: this.barcode, barcodeType});
        this.barcode = '';
        return;
      }
      this.barcode += keyEvent.pressedKey;
    });
  }

 getBarcodeType(input: string): Format | undefined {
    const ean13Pattern = /^[0-9]{13}$/gm;
    const ean8Pattern = /^[0-9]{8}$/;
    const ean128Pattern = /^[(0-9A-Za-z)]+$/;
    console.log(
      '***',
      input,
      typeof input,
      input.length,
      input.match(ean13Pattern),
    );
    if (ean13Pattern.test(input)) {
      return 'EAN';
    } else if (ean8Pattern.test(input)) {
      return 'EAN';
    } else if (ean128Pattern.test(input)) {
      return 'CODE128';
    }
    return undefined;
  }

问题是正则表达式永远不匹配,当我匹配时

console.log(
   '***',
   input,
   typeof input,
   input.length,
   input.match(ean13Pattern),
);

输出:

LOG *** 5449000214911 string 26 null
我的长度是26而不是13,有人能告诉我为什么吗?

egdjgwm8

egdjgwm81#

我使用spread on string,然后我看到我的字符串包含许多不可打印的字符

console.log([...input].join(','));

来替换我用的隐形字符

input.replace(/[\x00-\x1F\x7F-\x9F]/g, '')

我不知道这是不是一个好的解决办法,但对我来说是有效的。

相关问题