嗨老师,请问如何实现银行卡账号输入,每4位空一个空格

来源:1-1 课前必读(不看会错过一个亿)

慕尼黑0536602

2021-04-12

嗨老师,请问如何实现银行卡账号输入,每4位空一个空格 ,
我网上查了很多都是加入正则表达式,就是每4位插入一个空格,但是我想保留下面的字数输出,如下图,我担心加正则表达式会把多余的空格当做字符同时被计入:
图片描述

Component :

import React from 'react';
import { StyleSheet, View } from 'react-native'
import { TextInput } from 'react-native-gesture-handler';
import AppText from './AppText/AppText';
import colors from '../config/colors';

function TitleInput({input_width="100%",...ortherProps}) {
    return (
        <View style={styles.container}>
            <AppText style={styles.title}>银行卡号</AppText>
           <View style={styles.input_container,{width:input_width}}>
           <TextInput
           style={styles.input_text}
           {...ortherProps}
           />
           </View>
        </View>
    );
}

const styles = StyleSheet.create({
    container :{
        flexDirection : 'column',
        padding : 5,
    },
    input_container : {
        borderColor : colors.white,
        borderWidth : 0.5,
        borderColor : colors.primary,
       
      
       
    },
    input_text: {
        fontSize: 16,
        color : colors.medium,
        borderColor : colors.primary,
        borderWidth :0.5,
        marginTop : 10,
        padding :10,
        borderRadius :10,
        
     
    },
    title : {
        fontWeight : 'bold',
    }
})
export default TitleInput;

主页使用:

import React,{useState} from 'react';
import {StyleSheet, View,Text } from 'react-native'
import TitleInput from './TitleInput';
import colors from '../config/colors';


function Visa({title}) {
    const [value,setValue] = useState("");
    return (
        <View style={styles.container}>
          <TitleInput 
          maxLength ={16}
          input_width="98%"
          onChangeText={(text)=>setValue(text)}
          keyboardType ='numeric'
          />
          <View style={styles.num_left}>
          <Text>{value === "" ? "0" : value.length}/16</Text>
          </View>
           
        </View>
    );
}

const styles = StyleSheet.create({
   container : {
       width :"100%",
       height :"100%",
       marginTop : 10,
   } ,
   num_left : {
       alignItems : 'flex-end',
       marginRight : 15,

   }
})
export default Visa;

麻烦帮我看下哈,谢谢老师!

写回答

1回答

CrazyCodeBoy

2021-04-16

可参考下:

<TextInput
            style={styles._text}
            placeholder="请输入卡号"
            placeholderTextColor={'#888'}
            underlineColorAndroid='transparent'
             multiline={true}
             onChangeText={this._onChange.bind(this)}
            value={this.state.inputValue}
            keyboardType='numeric'
           />
//监听输入卡号
    _onChange(value) {
        var str = '' ;
        //输入数字长度大于输入框内长度,每4个就一个空格
        if(value.length > this.state.inputValue.length){
            var reg =   /\s/g;//加入正则,过滤掉字符串中的空格
            value.replace( reg, "").split('').map(function (item,index) {
                (index+1) % 4 == 0 ? str = str + item + ' ': str += item;
            })
            this.setState({
                inputValue: str
            })
            return str;
        } else { 
        // 通过这样判断回删才会正常,不然会一直卡在空格位置
            this.setState({
                inputValue: value
            })
        }
    }


1
1
慕尼黑0536602
好嘞,谢谢老师!
2021-04-16
共1条回复

RN入门到进阶,打造高质量上线App

解锁React Native开发应用新姿势,React Native新版本热门技术

3144 学习 · 3241 问题

查看课程