Jef*_*chy 4 html javascript forms field masking
我想在这里做的是要求将电话号码输入我的HTML表格(XXX)XXX-XXXX,并将SS号码输入为XXX-XX-XXXX.而已.
我这样做的唯一原因是表单提交结果一致且易于导出到Excel.
我被告知使用Javascript来做到这一点,但也许我不够先进,无法理解这样做的所有步骤.
有人可以指出我正确的方向,请记住我是一个初学者?
哇非常感谢Ethan和@ suman-bogati!我现在几乎都在那里!该字段现在弹出一个错误,说明使用正确的格式555-55-5555.那很棒.但无论我输入什么进入该领域,弹出窗口仍然存在.我尝试了555-55-5555和555555555,但都没有被接受.这是该字段的HTML:
<label>
Social Security Number:
<input id="ssn" required pattern="^d{3}-d{2}-d{4}$"
title="Expected pattern is ###-##-####" />
</label>
</div>
<script>$('form').on('submit', function(){
$(this).find('input[name="SocialSecurity"]').each(function(){
$(this).val() = $(this).val().replace(/-/g, '');
});
$(this).find('input[name="ssn"]').each(function(){
$(this).val() = $(this).val().replace(/-/g, '');
});
});</script>
<br />
Run Code Online (Sandbox Code Playgroud)
Eth*_*own 11
最简单的方法是简单地使用多个字段:
<div>
Phone:
(<input type="text" name="phone-1" maxlength="3">)
<input type="text" name="phone-2" maxlength="3">-
<input type="text" name="phone-3" maxlength="4">
</div>
<div>
SSN:
<input type="text" name="ssn-1">-
<input type="text" name="ssn-2">-
<input type="text" name="ssn-3">
</div>
Run Code Online (Sandbox Code Playgroud)
虽然这种方法当然很容易,但并不是很好.用户必须按Tab键或单击每个字段才能输入数据,除了数字之外,没有任何东西(常识除外)阻止他们输入数字以外的东西.
我总觉得,在验证方面,用户越少越好.让他们以他们喜欢的任何格式输入他们的电话号码,然后你擦洗它,删除除数字之外的所有内容.这样用户可以输入"5555551212"或"(555)555-1212",但数据库将始终保持"5555551212".
另一件需要考虑的事情是HTML5为电话号码(但不是SSN)提供了一些不错的特定类型.现代浏览器将负责所有输入验证,更好的是,移动设备将显示数字键盘而不是整个键盘.
鉴于此,显示表单的最佳方式是:
<div>
<label for="fieldPhone">Phone: </label>
<input type="tel" id="fieldPhone" placeholder="(555) 555-1212">
</div>
<div>
<label for="fieldSsn">SSN: </label>
<input type="text" id="fieldSsn" name="ssn" placeholder="555-55-5555" pattern="\d{3}-?\d{2}-?\d{4}">
</div>
Run Code Online (Sandbox Code Playgroud)
如果用户有一个现代浏览器,这将为您处理输入验证的用户端.如果他们不这样做,您将不得不使用验证库或polyfill.这里有一整套HTMl5表单验证polyfill:
https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-Browser-Polyfills#wiki-web-forms
因此,现在剩下的就是在将数据保存到数据库时规范化数据.
这样做的理想场所是后端; 但是,它没有说明你的表格在哪里,所以也许你对后端的处理方式没有任何发言权.所以你可以在前端做到这一点.例如,使用jQuery:
$('form').on('submit', function(){
$(this).find('input[type="tel"]').each(function(){
$(this).val() = $(this).val().replace(/[\s().+-]/g, '');
});
$(this).find('input[name="ssn"]').each(function(){
$(this).val() = $(this).val().replace(/-/g, '');
});
});
Run Code Online (Sandbox Code Playgroud)
这也不是一个完美的方法:如果你在这个函数中进行验证,并且验证失败,用户将看到他或她的输入被标准化版本取代,这可能令人不安.
最好的方法是使用AJAX和.serialize
; 您不仅可以更好地控制用户界面,还可以进行所需的所有验证.但这可能超出了你现在需要做的事情.
请注意,手机验证是最棘手的.HTML5手机验证是非常宽松的,允许人们输入国际电话号码,这可能有相当复杂的格式.即使美国人有时会输入"+1(555)555-1212"这样的电话号码,然后你有8位而不是7位.如果你真的想将它们限制为7位数,你必须添加你的自定义验证:
/^\(?\d{3}\)?[.\s-]?\d{3}[.\s-]\d{4}$/
Run Code Online (Sandbox Code Playgroud)
这将涵盖人们使用的所有常见变体(句号,空格,破折号,括号),并且仍然只允许7位数的美国电话号码.
这是一个演示HTML5验证和规范化的jsfiddle:
我希望这有帮助!
归档时间: |
|
查看次数: |
57116 次 |
最近记录: |