【发布时间】:2019-12-10 12:51:26
【问题描述】:
我有一个关于实时更新 UI(输入时)的问题。这是正确的方法吗?
我有这个代码:
正则表达式方法:
determineCardBrand(number) {
var re = new RegExp("^4");
var reMC = new RegExp(
"/^(5[1-5][0-9]{14}|2(22[1-9][0-9]{12}|2[3-9][0-9]{13}|[3-6][0-9]{14}|7[0-1][0-9]{13}|720[0-9]{12}))$/",
);
if (number.match(re) != null) {
return "Visa";
} else if (number.match(reMC) != null) {
return "MasterCard";
} else {
return "";
}
}
查看代码sn-p:
<View style={{ flexDirection: "row" }}>
<CardLogo
style={styles.cardLogo}
cardType={
cardNumber === ""
? "Inactive"
: this.determineCardBrand(cardNumber)
}
/>
<TextInputMask
underlineColorAndroid={"transparent"}
type={"credit-card"}
maxLength={19}
style={[Styles.paymentCardInput, { flexGrow: 1 }]}
onChangeText={cardNumber => {
this.setState({ cardNumber });
this.determineCardBrand(cardNumber);
}}
value={cardNumber}
returnKeyType="done"
/>
</View>
我想确定我输入的卡号是否与 CC 品牌(例如 Visa、万事达卡等)相关联。因此,当我输入卡号时,我希望卡标志根据我输入的数字而改变。 CardLogo 组件有一个 switch 语句,用于确定是否传递类型名称,例如签证,然后显示签证标志。
这是正确的方法吗?
通常,您可以从前四位数字中找到(我认为),但有时只是第一个数字,例如像签证卡..总是以四个开头。我测试了上述内容,但由于某种原因,它仅适用于 Visa 或未知 CC,不适用于万事达卡。我不确定是因为正则表达式还是我在上面设置代码的方式。
【问题讨论】:
-
据我所知,万事达卡的第一个数字总是 5。可能这是您的正则表达式的问题。在我看来,你的方法看起来不错。
-
This 可以帮助您解决正则表达式
标签: javascript reactjs react-native