Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中的正则表达式,格式非常特殊_Javascript_Regex - Fatal编程技术网

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

javascript中的正则表达式,格式非常特殊,javascript,regex,Javascript,Regex,我有一个输入,必须格式化用户键入的内容(实际上是来自他的银行帐户的信息)。但数字必须以某种方式格式化: 前5位数字必须是数字 如果用户键入的数字超过5个,则最后一个数字前面必须有“-” 在5位数之后,用户可以键入“x”或“x” 数字的最小值为5位,最大值为15位 示例: 12345 12345-1 123456-1 1234567-1 12345-x 123456789-x 123456789-X 1234567890134-5 实际上,我正在使用一个规范化器来替换字符串 这是我正在使用

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

  • 前5位数字必须是数字
  • 如果用户键入的数字超过5个,则最后一个数字前面必须有“-”
  • 在5位数之后,用户可以键入“x”或“x”
  • 数字的最小值为5位,最大值为15位
示例:

  • 12345
  • 12345-1
  • 123456-1
  • 1234567-1
  • 12345-x
  • 123456789-x
  • 123456789-X
  • 1234567890134-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')
      }
    }
}
export const normalizeBankAccount=value=>{
如果(!值){
返回值
}

如果(value.length,您可以查找给定的长度,后跟一个字符并添加减号

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

console.log(['12345','123451','1234561','12345671','12345x','123456789x','123456789x','123456789x','1234567890123345'].map(标准化))
它实际上不起作用,因为数字必须在用户不断键入时格式化。您需要清除字符串中的所有减号并应用规范化。几乎起作用了,我删除了减号,正如您所说的:`string.replace('-','''.).replace(/^\d{5,14}(?=[0-9x]$)/I,$&-'))`但是我不能键入x或x。用字符串替换,而不是用正则表达式替换查找的第一次出现。带有正则表达式和全局标志的版本会搜索所有出现的情况。您可以删除不需要的字符。也许您需要用
'x'
再次检查较短的项目。