文本框无法接受非英文字符的技术分析

关于文本框无法输入非英文字符的现象,在日常国际化测试工作中出现的概率极大。为了限制用户的输入必须符合软件定义的规范,开发人员一般都会对输入框中的value通过正则表达式或事件进行校验。如下图所示,当cost type被设置为“日本语”时,错误框将弹出,操作也无法继续进行。

本例中将以正则表达式作为假定的技术背景,对这一现象进行分析,示例代码如下。
public class CostConfigDTO {
     ...
     @NotNull
     @Size(min = 1, max = 255, message = "Size range set to 1-255")
     @Pattern(regexp = ".*[a-zA-Z0-9].*", message = "Category types must contain at least one alphanumeric character")
     ...
}
 
这里我们可以清晰的看到,对该输入框value进行验证的正则表达式被设置为[a-zA-Z0-9],即只允许输入大小写的字母a-z外加数字0-9。然而这一设置显然是国际化软件开发中的兵家大忌,为了修复该问题,我们可以对代码进行如下修改。
public class CostConfigDTO {
     ...
     @NotNull
     @Size(min = 1, max = 255, message = "Size range set to 1-255")
     @Pattern(regexp = "^([^\\S+]).*", message = "Category types must not begin with a white space")
     ...
}
 
这里我们用\S替换掉之前的[a-zA-Z0-9],它可以匹配任何非空白字符,等价于 [^ \f\n\r\t\v]。改动后,本例中的非英文字符无法输入问题得到解决。然而需要注意的是,正则表达式中的pattern取消了之前的严格验证机制,原有问题不再出现,但在其他场景中势必引入新的国际化问题,例如转义字符等,这又是我们需要进一步考虑的。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值