Javascript 的 search() 函数行为不正常
Posted
技术标签:
【中文标题】Javascript 的 search() 函数行为不正常【英文标题】:search() function of Javascript does not behave properly 【发布时间】:2013-08-24 00:20:36 【问题描述】:我不知道为什么search()
函数会为任何带有特殊字符的输入返回 0,我想找到特殊字符第一次出现的位置。当我对 search()
方法的值进行硬编码时,它工作正常,但是当我从文本框中获取值时,它不能正常工作。
以下是我的 html 代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<script type="text/javascript" src="jquery-1.6.4.min.js"></script>
<script type="text/javascript" src="test.js"></script>
</head>
<body>
<input type="text" id="txt" onkeyup="return checkLength();"/>
<input type="button" id="btn" value="Verify" onclick="getValue()"/>
</body>
</html>
以下是我实现使用 Javascript 的 search()
的脚本,但不知道为什么我得到任何输入的 0 值。其实我想找到第一个特殊字符出现的位置。
$(document).ready(function()
$('#btn').attr('disabled',true);
$("#txt").bind(
paste : function()
$('#btn').attr('disabled',false);
checkLength();
,
cut : function()
checkLength();
);
);
function checkLength()
var txtLength = $("#txt").val().length;
var banTxt = document.getElementById("txt").value;
if (txtLength != 0)
if(isAlphaNumeric(document.getElementById("txt").value))
$('#btn').attr('disabled',false);
else
var str=banTxt;
//Here I am using search() to find position of Special Character.
var n=banTxt.search(/[^a-zA-Z ]/g);
alert("position of special char is: " + n);
var preTxt = banTxt.substring(0,(txtLength - 1));
var preTxtLength = preTxt.length;
alert("Special characters are not allowed!");
if(preTxtLength == 0)
$('#btn').attr('disabled',true);
document.getElementById("txt").value = "";
else if(preTxtLength != 0)
document.getElementById("txt").value = preTxt;
$('#btn').attr('disabled',false);
else
$('#btn').attr('disabled',true);
function isAlphaNumeric(inputString)
return inputString.match(/^[0-9A-Za-z]+$/);
function getValue()
var txtValue = document.getElementById("txt").value;
alert("Value submitted is: " + txtValue);
【问题讨论】:
请尝试输入像“123#4”这样的输入(不带引号)。 您输入的哪个值产生了意想不到的结果? 我尝试使用带有特殊字符(如 123#4$5 、 12#4 等)的字符串,但由于特殊字符的位置为:0 【参考方案1】:var n=banTxt.search(/[^a-zA-Z ]/g);
我尝试使用带有特殊字符(如 123#4$5 、 12#4 等)的字符串,但由于特殊字符的位置为:0
这正是您的正则表达式匹配的内容:没有字母字符和空格 - 包括数字。相比之下,您的 isAlphaNumeric
函数与 /^[0-9A-Za-z]+$/
匹配 - 您可能希望将它们相互对齐。
【讨论】:
【参考方案2】:实际上我使用了以下行 var n=banTxt.search(/[^a-zA-Z ]/g);为了获得特殊字符的位置,同时请注意我使用了 onkeyup 事件,所以如果我复制粘贴代码,即首先 ctrl 然后 v, ctrl + v 然后 ctrl 本身就是 keyup 事件我认为这可能是我得到 0 作为特殊字符位置的原因,就像按下 ctrl 没有粘贴文本,但触发了 onkeyup 事件。
我正在寻找它的解决方案。
【讨论】:
如果这是您问题的答案,您应该接受它。如果不是答案,您应该在问题中编辑此详细信息并删除此答案。以上是关于Javascript 的 search() 函数行为不正常的主要内容,如果未能解决你的问题,请参考以下文章