【正则表达式】——限制只能输入数字和小数点及位数

前端之家收集整理的这篇文章主要介绍了【正则表达式】——限制只能输入数字和小数点及位数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

在项目中,特殊字符的输入限制屡见不鲜,可以说,对字符输入的限制,已经是一个程序猿的基本功。常见的字符输入限制有很多类型,如:只能输入汉字;只能输入数字和小数点;只能输入英文字母等。。。


今天,和大家分享一个比较基本的特殊字符输入限制的通用方法:只能输入数字和小数点,并且规定小数位数和最大输入值。这个基本可以解决大家数值型输入限制了。


  1. //对文本输入框【按键】事件进行控制,限制只能输入数字、小数点、负号,并可对小数位数进行控制
  2. //该方法只能添加到 文本输入框的 onkeypress事件
  3. // 参数obj: 输入框对象
  4. // 参数_fragMaxLen: 小数位长度,默认值为2,-1表示不限制小数位长度,0表示只能输入整数
  5. // 参数_hasNegative: 是否允许输入负号,默认为true,即允许
  6. //示例:
  7. // <input maxlength="10" onfocus="this.select()" onkeypress="return inputFloatCheck(this,3);"
  8. // onpaste="inputFloatPaste(this)" ondrop="event.returnValue = false;" onblur="inputFloatCheck(this,3)"/>
  9. function inputFloatCheck(obj,_fragMaxLen,_hasNegative,_maxValue) {
  10. //alert(event.keyCode + "" + event.shiftKey);
  11. //alert();
  12. if (document.selection.type.toLowerCase() == "text") {
  13. document.selection.clear();
  14. }
  15. var fragMaxLen = 2;
  16. var isHasNegative = true;
  17. if (arguments.length > 1) {
  18. try {
  19. fragMaxLen = parseInt(arguments[1]);
  20. } catch (e) { }
  21. }
  22. if (arguments.length > 2) {
  23. try {
  24. isHasNegative = arguments[2];
  25. } catch (e) { }
  26. }
  27. var nCursorPos = getTextInputCursorPos(obj);
  28. var maxValue = undefined;
  29. if (arguments.length > 3) {
  30. try {
  31. maxValue = parseFloat(arguments[3]);
  32. } catch (e) { }
  33. }
  34. if (event.keyCode >= 48 && event.keyCode <= 57) {
  35. if (maxValue != undefined) { //判断是否大于给定的最大值
  36. var testValue = obj.value.substring(0,nCursorPos) + (event.keyCode - 48) + obj.value.substring(nCursorPos);
  37. testValue = parseFloat(testValue);
  38. if (testValue > maxValue) {
  39. event.returnValue = false;
  40. return false;
  41. }
  42. }
  43. }
  44. if (event.keyCode >= 48 && event.keyCode <= 57) {
  45. if (fragMaxLen > 0) { //如果有小数位限制
  46. var nDotPos = obj.value.indexOf(".");
  47. if (nDotPos > -1) {//如果当前已经有小数点
  48. if (nCursorPos > nDotPos) { //光标在小数点后
  49. var str1 = obj.value.substring(nDotPos + 1);
  50. if (str1.length >= fragMaxLen) {//当前小数位长度超过最大小数位长度
  51. event.returnValue = false;
  52. return false;
  53. }
  54. }
  55. }
  56. }
  57. return true;
  58. }
  59. if (event.keyCode == 45 && isHasNegative) {//输入负号
  60.  
  61. if (obj.value.indexOf("-") > -1) { //已经有负号,则不允许再输入
  62.  
  63. } else { //如果当前没有负号,则负号只能出现在第一个字符位置
  64. if (getTextInputCursorPos(obj) == 0) {
  65. return true;
  66. }
  67. }
  68. event.returnValue = false;
  69. return false;
  70. }
  71. if (fragMaxLen != 0) { //fragMaxLen==0 表示只能输入整数
  72. if (event.keyCode == 46) { //输入小数点
  73. if (obj.value.indexOf(".") > -1) {//已经有小数点,则不允许再输入
  74. } else if (obj.value.indexOf("-") > -1) { //如果当前没有小数点,有负号,则小数点不能在负号之前
  75. if (getTextInputCursorPos(obj) > 0) {
  76. return true;
  77. }
  78. } else {
  79. return true;
  80. }
  81. event.returnValue = false;
  82. return false;
  83. }
  84. }
  85. event.returnValue = false;
  86. return false;
  87. }
  88.  
  89. function getTextInputCursorPos(obj) {
  90. var rngSel = document.selection.createRange(); //建立选择域
  91. var rngTxt = obj.createTextRange(); //建立文本域
  92. var flag = rngSel.getBookmark(); //用选择域建立书签
  93. rngTxt.collapse(); //瓦解文本域到开始位,以便使标志位移动
  94. rngTxt.moveToBookmark(flag); //使文本域移动到书签位
  95. rngTxt.moveStart('character',-obj.value.length); //获得文本域左侧文本
  96. str = rngTxt.text.replace(/\r\n/g,''); //替换回车换行符
  97. return (str.length); //返回文本域文本长度
  98. }


多多积累代码量,把这些日常用的代码储备起来,形成自己的代码库,在开发过程中,开发效率会大大增加。自己在代码量上,实在是有很大差距,需要在项目中逐渐提高。

猜你在找的正则表达式相关文章