使用js判断表单输入的数据类型,有点不如意,进来帮帮忙吧!

张群区块链
业界专家认证
2004-06-24 11:29:18
测试:在文本框试图输入非法字符
1.为什么输入第一个非法字符的时候不报错,第二个才有提示信息?
2.怎么才在“确定”报错信息后清空文本框,我使用s.vlaue="";为什么不行?
3.我不懂正则表达式,这些东西弄得我头疼,那里有基础教程?

请大虾看看代码

表单如下:
<form name="frm">
<input valtype="zh" onKeypress="chkall(this);" name="hotelname">
<input name="addr" valtype="r" onKeyPress="chkall(this);" name="tim">
<input name="full" valtype="sh" onKeyPress="chkall(this);" name="sia">
</form>

函数如下:

function String.prototype.trim(){return this.replace(/(^\s*)|(\s*$)/g, "");}

function chkall(obj){
a=obj.valtype;
switch (a){
case "r":
isDate(obj);
case "sh":
isNumeric(obj);
case "k":
isZero(obj);
case "y":
isMail(obj);
case "zh":
isChinese(obj);
}
}
function isDate(s,msg){
if (s.value.length==0)return true;
if (!msg)msg='请输入正确的日期';
var str=s.value
var reg = /^(\d{4})(-|\/)(0?[1-9]|1[0-2])(-|\/)(0?[1-9]|[12][0-9]|3[01])$/g;
var r = reg.exec(str);
if(r==null){alert(msg);s.select();return false;}
var d = new Date(r[1], r[3]-1,r[5]);
var newStr=d.getFullYear()+r[2]+(d.getMonth()+1)+r[2]+d.getDate()
var reg=/(\/|-)(0*)( *)([1-9])/g
var t=s.value.replace(reg,'$1$4')
if (newStr==t){return true;}
s.focus();
s.select();
alert(msg);
return false;
}

function isEmail(s,msg){
if (s.value.length==0)return true;
var reg = /^([a-z]){1,}([\.a-z0-9_\-]){1,}([a-z0-9]){1,}@([a-z0-9_-]){3,}(\.([a-z0-9]){2,4}){1,2}$/gi;
if (reg.test(s.value))return true;
else {
s.value="";
s.focus();
alert((msg?msg:'请输入正确的E_mail'));
return false;
}
}



function isChinese(s,msg){
var reg = /[^\u4E00-\u9FA5]/g;
if (reg.test(s.value)){
alert((msg?msg:'只能输入中文,请改正'));
event.returnValue=false;
}
return true;
}

function isNumeric(s,msg){
if (s.value*1!=s.value){
alert((msg?msg:'该栏只能输入数字﹐请改正'))
s.focus();
s.select();
return false
}
return true
}
...全文
279 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
张群区块链 2004-06-25
  • 打赏
  • 举报
回复
谢谢大家,特别感谢Apexivan(最爱茉莉花) ,wanghr100(灰豆宝宝.net)
我给分了
JK_10000 2004-06-24
  • 打赏
  • 举报
回复
用onkeypress控制输入类型难度有点高
还有就是不能阻止用户向输入框Copy+Paste不符要求的内容。
若禁止Copy+Paste又带给用户不乐意的限制

-----个人之见
张群区块链 2004-06-24
  • 打赏
  • 举报
回复
up
wanghr100 2004-06-24
  • 打赏
  • 举报
回复
怎么判断输入的是时间格式啊22:00:00

<script>
function isTime(str)
{
var reg = /^(\d{1,2})(\:)(\d{1,2})\2(\d{1,2})$/;
result = str.match(reg);
if(result == null)return false;
str2 = "2004\/1\/1 "+result[1]+":"+result[3]+":"+result[4];
d = new Date(str2);
if(isNaN(d))return false;
else return true;
}
alert(isTime("25:00:20"))
alert(isTime("22:00:00"))
</script>
张群区块链 2004-06-24
  • 打赏
  • 举报
回复
另外我问个问题,怎么判断输入的是时间格式啊(22:00:00,注意不是日期格式2004-4-3)
这个函数怎么写?
张群区块链 2004-06-24
  • 打赏
  • 举报
回复
谢谢 Apexivan(最爱茉莉花) 和楼上的其他朋友

大家继续给点意见好吗?
Apexivan 2004-06-24
  • 打赏
  • 举报
回复
第一个问题:把onKeyPress改成onKeyUp就OK了;
第二个问题:用对象引用的完全限定名称比较好,即document.formName.textName.value = "";
第三个问题:正则表达式基础:
模式,是正则表达式最基本的元素,可以很简单,也可以非常复杂。
^ : 特殊字符,表示模式只匹配那些以^之后的字母做开头的字符串;
$ : 特殊字符,表示模式只匹配那些以$之前的字母做结尾的字符串;
\t、\n、\r等表示转义字符;(如\\就表示\本身,\"表示")
[a-z] : 匹配所有小写字母;
[A-Z] : 匹配所有大写字母;
[a-zA-Z] : 匹配所有字母;
[0-9] : 匹配所有数字;
[^X...] : 在^后面的是匹配除X...之外所有的字符;
. : 特殊字符,表示除了换行符\n之外所有的字符;
{X,Y} : 表示前面的字符最少出现X次,最多出现Y次;而且{0,1}与?效果相等;{0,}与*效果相等;{1,}与+效果相等;

所以,综上所述,例如:
^\-?[0-9]*\.?[0-9]*$ : 匹配所有的小数;
^[^0-9].+@.+\..+$ : 匹配所有的E-Maile地址;
也可以将模式的不同部分加以区分,如: ^([^0-9].+)@(.+)\.(.+)$
LxcJie 2004-06-24
  • 打赏
  • 举报
回复
前几天做了这个东西,可以限制输入

---------------------------------------
<style>
input
{
border:1px solid black;
}
</style>
<SCRIPT language="javascript">
<!--start
/*
* added by LxcJie 2004.6.11
* 约束输入框的内容
* 适用于IE5.0及以上版本
* oObj: 输入框控件对象
* reg: 正则表达式
* isChinese:是否允许打开输入法,true 允许打开,即允许输入中文,false 不能打开,默认为不允许打开
* usage:
*
* //只能输入数字和大小写字母
* <BODY onLoad="regInputRestriction(document.all.txt,/^[0-9a-zA-Z]*$/)">
* <input id="txt">
* </BODY>
*/
function regInputRestriction(oObj,reg,isChinese)
{
function regInput(obj, reg, inputStr)
{
var docSel = document.selection.createRange();
if (docSel.parentElement().tagName.toLowerCase() != "input")
return false;
oSel = docSel.duplicate();
oSel.text = "";
var srcRange = obj.createTextRange();
oSel.setEndPoint("StartToStart", srcRange);
var str = oSel.text + inputStr + srcRange.text.substr(oSel.text.length);
return reg.test(str);
}
//限制输入法是否允许打开
if(isChinese == null)
isChinese = false;
if(isChinese)
oObj.style.imeMode = "auto";
else
oObj.style.imeMode = "disabled";

//注册事件
oObj.onkeypress = function()
{
return regInput(this,reg,String.fromCharCode(event.keyCode));//输入时激发
}
oObj.onpaste = function()
{
return regInput(this,reg,window.clipboardData.getData('Text'));//粘贴时激发
}
oObj.ondrop = function()
{
return regInput(this,reg,event.dataTransfer.getData('Text'));//拖拽时激发
}
}
//-->
</SCRIPT>
<script language="javascript">
function initForm()
{
regInputRestriction(document.all.onlyNumber,/^[0-9]*$/);
regInputRestriction(document.all.lowerLetter,/^[a-z]*$/);
regInputRestriction(document.all.upperLetter,/^[A-Z]*$/);
regInputRestriction(document.all.letter,/^[a-zA-Z]*$/);
regInputRestriction(document.all.numberLetter,/^([0-9a-zA-Z])*$/);
regInputRestriction(document.all.chinese,/^[\u4E00-\u9FA5]*$/,true);
regInputRestriction(document.all.twoDigFloat,/^\d*\.?\d{0,2}$/ );
regInputRestriction(document.all.dateNum,/^\d{1,4}([-\/](\d{1,2}([-\/](\d{1,2})?)?)?)?$/);
regInputRestriction(document.all.partEn,/^[a-e]*$/);
regInputRestriction(document.all.notSpecialLetter,/^[^|#]*$/);
}
</script>
<BODY onLoad="initForm()" style="font-size:12px;">
<INPUT id="onlyNumber"> 只能输入数字<br><br>
<INPUT id="lowerLetter"> 只能是小写字母<br><br>
<INPUT id="upperLetter"> 只能是大写字母<br><br>
<INPUT id="letter"> 只能是字母<br><br>
<INPUT id="numberLetter"> 只能是字母数字<br><br>
<INPUT id="chinese"> 只能是中文(bug:紫光拼音可以输入英文)<br><br>
<INPUT id="twoDigFloat"> 只能是两位小数<br><br>
<INPUT id="dateNum"> 只能是日期型<br><br>
<INPUT id="partEn"> 是部分英文(a-e)<br><br>
<INPUT id="notSpecialLetter"> 不能输入 # 和 |<br><br>
</BODY>

-----------------------------------------

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧