Как ограничить, какие символы можно использовать в TextInput?

Я пытаюсь, чтобы пользователь добавил имя пользователя при регистрации. Дело в том, что я не хочу допускать никаких символов, кроме подчеркивания (_) и тире (-). Я не знаю, как ограничить разрешенные символы только этими двумя. В настоящее время мой код проверяет минимальную длину, максимальную длину, проверяет, используется ли уже имя пользователя, и обрезает пробелы:

checkUsername = async() => {
    //Check for minimum length reached
    if (this.state.username.length < 3) { <-------------------------- Check for minimum length
        console.info('Your text is less than what is required.');
    }
    else { <----------------------- Minimum length reached, now we can check database if the username already exists
        await Firebase.firestore()
        .collection('usernames')
        .doc(this.state.username)
        .get()
        .then(function(doc) {
            if (doc.exists) {
                console.info("username in use")
            } else {
                console.info("username is ok");
            }
        }.bind(this));
    }
}

render() {
    return (
        <View style = {styles.container}>
            <Text style = {styles.headerText}>traderank</Text>
            <TextInput
                style = {styles.inputBox}
                value = {this.state.username.trim()} <------------------- Get rid of whitespace
                onChangeText = {username => this.setState({ username })}
                placeholder='username'
                autoCapitalize='none'
                maxLength = {15} <-------------- make sure username does not exceed 15 characters
            />


            <TouchableOpacity 
                style = {styles.button} 
                onPress = {this.handleSignUp}>
                    <Text style = {styles.buttonText}>sign up</Text>
            </TouchableOpacity>

            <Button title = "back to login" 
                onPress = {() => this.props.navigation.navigate('Login')}/>
        </View>
    )
}
}

Я предполагаю, что мне следует добавить логику, чтобы гарантировать, что при проверке минимальной длины участвуют только тире или символы подчеркивания, но я понятия не имею, как это сделать. Заранее спасибо.

Умерло ли Create-React-App?
Умерло ли Create-React-App?
В этом документальном фильме React.dev мы исследуем, мертв ли Create React App (CRA) и какое будущее ждет этот популярный фреймворк React.
Освоение React Native: Пошаговое руководство для начинающих
Освоение React Native: Пошаговое руководство для начинающих
React Native - это популярный фреймворк с открытым исходным кодом, используемый для разработки мобильных приложений. Он был разработан компанией...
В чем разница между react native и react ?
В чем разница между react native и react ?
React и React Native - два популярных фреймворка для создания пользовательских интерфейсов, но они предназначены для разных платформ. React - это...
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
Хуки React: что это такое и как их использовать
Хуки React: что это такое и как их использовать
Хуки React - это мощная функция библиотеки React, которая позволяет разработчикам использовать состояние и другие возможности React без написания...
0
0
72
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я решил проблему, добавив это:

<TextInput
                style = {styles.inputBox}
                value = {this.state.username.trim().replace(/[^\w\s]/gi, "")} <-------------------
                onChangeText = {username => this.setState({ username })}
                placeholder='username'
                autoCapitalize='none'
                autoCorrect = {false}
                maxLength = {15}
            />

Замена запрещает все (специальные символы), кроме подчеркивания, букв и цифр. Без тире, но пока все в порядке. Если у кого-то есть лучшее решение, я весь внимание!

Другие вопросы по теме