javascript - javascript 中的正则表达式,格式非常特殊

标签 javascript regex

我有一个输入必须格式化用户输入的内容(实际上是来自他的银行帐户的信息)。但是数字必须以某种方式格式化:

  • 前 5 位必须是数字。
  • 如果用户键入超过 5 个数字,最后一个数字前面必须有一个“-”
  • 在第 5 位数字后,用户可以键入“x”或“X”
  • 号码最少5位,最多15位

例子:

  • 12345
  • 12345-1
  • 123456-1
  • 1234567-1
  • 12345-x
  • 123456789-x
  • 123456789-X
  • 12345678901234-5

实际上,我正在使用一个替换字符串的标准化器。

这是我正在使用的,但我无法正确格式化它。

export const normalizeBankAccount = value => {
    if (!value) {
      return value
    }

    if(value.length <= 16 && (!value.match(/[^\d|X]/g) || !value.match(/[^\d|-]/g) || !value.match(/[^\d|x]/g))) {
      if(value.length <= 5){
        return value.replace(/[^\d]/g, '')
      } else if(value.length >= 6) {
        const len = value.length;
        const aux=value;
        const initial = value.substring(0,value.length-1).replace('-', '');
        console.log("len: " +len, "\naux: " +aux,"\ninitial: "+ initial)
        return value.replace(new RegExp("\\d{"+ len +"}") , initial+ '-').replace(/[X]/g, '-X').replace(/[x]/g, '-x')
      }
    }
}

当我使用这个方法时,字符串的格式如下:

  • 12345-6789123

最佳答案

您可以查找给定长度,后跟单个字符并添加减号。

const
    normalize = string => string.replace(/^\d{5,14}(?=[0-9x]$)/i, '$&-');

console.log(['12345', '123451', '1234561', '12345671', '12345x', '123456789x', '123456789X', '123456789012345'].map(normalize));

输入示例。

function update(element) {
    element.value = element.value
        .replace(/[^0-9x]/gi, '')
        .replace(/x(?=.)/gi, '')
        .replace(/^\d{5,14}(?=[0-9x]$)/i, '$&-');
}
<input type="text" onkeyup="update(this)" id="x">

关于javascript - javascript 中的正则表达式,格式非常特殊,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55666690/

相关文章:

javascript - 如何在javascript中更改urlpath

Java正则表达式用逗号分割字符串但忽略引号和括号

java - 如何用两个分隔符拆分字符串?

php - 有人可以解释/e 正则表达式修饰符吗?

javascript - 在多个 angular.js 应用程序之间共享单个服务

javascript - 通过单元格格式化程序更改制表单元格颜色会删除显示的值

javascript - iPhone : Fast Forward & Rewind using HTML5 <audio> & playbackRate doesn't work?

javascript - 通过单击其他区域(包括其他下拉菜单)关闭下拉菜单

javascript - typescript 文件在哪里以及如何成为我项目中的 JS 文件?

php - 如何让文本框在 PHP 中只接受日本字符、数字和单词?