Magento 1.9.2手机号验证问题:添加validate-phoneStrict仍可输入字母
解决Magento 1.9.2手机号输入框允许字母的问题
嘿,我来帮你搞定这个头疼的问题!你已经加了validate-phoneStrict类,但还是能输入字母,大概率是因为这个类只是提交时的验证规则,并没有限制用户输入过程中的字符,而且默认的validate-phoneStrict规则其实允许空格、括号这类符号(虽然不允许字母,但可能你的前端验证没正确触发?)。下面给你几个实用的解决办法:
方法1:实时限制输入(最直接)
给输入框加上onkeypress事件,直接阻止字母和非数字的输入,同时配合HTML5的pattern属性做双重保障。修改后的代码如下:
<input type="text" name="billing[telephone]" value="<?php echo $this->escapeHtml($this->getAddress()->getTelephone()) ?>" title="<?php echo $this->__('Telephone') ?>" class="input-text validate-phoneStrict <?php echo $this->helper('customer/address')->getAttributeValidationClass('telephone') ?> " id="billing:telephone" pattern="[0-9]+" onkeypress="return event.charCode >= 48 && event.charCode <= 57" />
onkeypress:只允许ASCII码48-57的字符(也就是0-9的数字),用户输入字母时直接无效pattern="[0-9]+":HTML5层面的验证,提交时会检查是否全为数字,和Magento的验证形成双重保险
方法2:调整Magento默认的validate-phoneStrict规则
默认的validate-phoneStrict正则是/^([0-9\(\)\/\+ \-]*)$/,虽然不允许字母,但如果你想彻底杜绝任何非数字字符,可以修改这个验证规则。不过注意不要直接改核心文件,建议用以下方式:
在你的主题的js目录下新建一个自定义脚本(比如custom-validation.js),然后在页面布局文件里引入它,内容如下:
Validation.add('validate-phoneStrict', '<?php echo $this->__("Please enter a valid phone number.") ?>', function(v) { return Validation.get('IsEmpty').test(v) || /^[0-9]+$/.test(v); });
这个脚本会覆盖默认的validate-phoneStrict规则,只允许空值或者纯数字。
方法3:清理缓存确保生效
有时候修改后看不到效果,是因为Magento的静态文件缓存或者页面缓存没清。记得去后台清理:
- 系统 > 缓存管理 > 全选 > 刷新
- 如果用了CDN或者浏览器缓存,也可以强制刷新页面(Ctrl+F5)
这样操作后,用户就没法在手机号输入框里输入字母啦!
内容的提问来源于stack exchange,提问作者akshay
相关产品推荐
相关产品推荐

