Я пытаюсь, чтобы пользователь добавил имя пользователя при регистрации. Дело в том, что я не хочу допускать никаких символов, кроме подчеркивания (_) и тире (-). Я не знаю, как ограничить разрешенные символы только этими двумя. В настоящее время мой код проверяет минимальную длину, максимальную длину, проверяет, используется ли уже имя пользователя, и обрезает пробелы:
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>
)
}
}
Я предполагаю, что мне следует добавить логику, чтобы гарантировать, что при проверке минимальной длины участвуют только тире или символы подчеркивания, но я понятия не имею, как это сделать. Заранее спасибо.
Я решил проблему, добавив это:
<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}
/>
Замена запрещает все (специальные символы), кроме подчеркивания, букв и цифр. Без тире, но пока все в порядке. Если у кого-то есть лучшее решение, я весь внимание!