在文本框中键入文本时,替换文本框中的一部分文本
Replace a part of text in textbox while typing text in it
文本框中的文本格式如下:
login -u username -p password
在键入此文本时,我想将"password"替换为与其长度相等的数字"*"。所以如果我输入:
文本框中的"login -u abc@abc.com -p abc
"应显示如下:
login -u abc@abc.com -p ***
而且我还需要存储被替换的实际密码。
有可能的办法吗?提前感谢
您应该使用正则表达式来解析输入值,即
<input type="text" id="inputText" />
<input type="hidden" id="actualPassword" /> <!-- Another element to store actual password -->
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript">
// Function to repeat string n times */
var StringUtilities = {
repeat: function(str, times) {
return (new Array(times + 1)).join(str);
}
};
$(function(){
$('#inputText').keyup(function(){
var test = /(login['s]+'-u['s]+[a-zA-Z0-9@'.'s]+'-p['s]+)(.*)/i.exec( $(this).val() ); //'login -u user123 -p password123'
if(test !== null)
{
if( $('#actualPassword').val().length < $.trim(test[2]).length )
$('#actualPassword').val( $('#actualPassword').val() + test[2].slice(-1) );
else
$('#actualPassword').val($('#actualPassword').val().slice(0, test[2].length));
$(this).val( test[1] + StringUtilities.repeat( '*', test[2].length) );
}
});
});
</script>
JS FIDDLE:http://jsfiddle.net/nmx04h1o/3/
您可以使用多个文本框,但仍然可以使其看起来像一个,命令提示符。使用CSS可以删除左右边框,并将它们连接得足够近。在每个文本框的按键事件中,检查用户是否键入了空格,并将焦点更改为下一个文本框。只要您有一些固定格式的输入,这个解决方案就可以工作。
您需要改变查看需求的方式。为什么只需要一个输入就可以从用户那里获取数据?
你需要以不同的方式收集用户名和密码,然后你可以在表单提交中合并相同的用户名和密码。
$("#submit").click(function(){
$output = "login -u " + $("#username").val() + " -p " + $("#password").val();
alert($output);
return false;
});
http://jsfiddle.net/kiranvarthi/j8gL9mvx/1/
不要这样做。你可以在我的答案底部看到我尝试了什么。
我稍微处理了一下这个问题,但当我这样做的时候,我又面临了另一个问题。
有两种方法可以做到这一点。第一,当用户输入字符时,您需要使用keyup
函数。
因此,您可以编写一个正则表达式,它捕获-p andsomecharactersherewhileitsnotspace
。
好的,第一种方法是捕获用户密码的最后一个字符,并将其连接到一个隐藏字段。我和Apul Gupta
试过这个。
出于某种原因,我们的两个代码都把密码搞砸了,因为出于某种原因我不知道,如果你打字要快,就会有*
个字符。我试图替换那些*
字符,但在这种情况下,密码中的一些字符丢失了。
另一种方法是从keyup事件中获取角色。这很糟糕,因为String.fromCharCode
总是返回大写字符,因为,keyup不知道是否发生了SHIFT
或CAPS LOCK
。也许现在你想,你可以应付,但你做不到。SHIFT很简单,但你不知道CAPS LOCK
以前是否打开过。
如果您只允许用户使用小写或大写密码,则可以解决此问题,但这很糟糕,因为会使密码失效。
所以,多想想。比方说,不知何故,我们可以使用其中一种解决方案。然后整个事情变成了一件非常复杂的事情,我认为什么太贵了。因为,你应该处理,如果用户只SHIFT, LEFT ARROW, DELETE
密码会发生什么。你需要检查,用按键组合选择了什么,光标在哪里,等等…
我建议你忘记这一点,或者试着找到另一种方法。
Kiran Var这个答案是我认为最好的选择。
我尝试过的:
<input type="text" name="userInput" id="userInput" value="" />
<input type="hidden" value="" name="hiddenPassword" id="hiddenPassword" />
<script type="text/javascript">
$(function() {
String.prototype.repeat = function(num) {
return new Array(num + 1).join(this);
}
//46 = delete key
$("#userInput").keyup(function(e) {
var match = $("#userInput").val().match(/-p(['s]+)(.+)/i);
if (e.keyCode === 8) {
var deleted = $('#hiddenPassword').val().substring(0, $('#hiddenPassword').val().length - 1);
$('#hiddenPassword').val(deleted);
} else {
if (match !== null && match[2] && String.fromCharCode(e.keyCode).match(/[a-zA-Z0-9]/)) {
//Alphanumeric
$('#hiddenPassword').val($('#hiddenPassword').val() + $("#userInput").val().substring($("#userInput").val().length - 1));
$("#userInput").val(($("#userInput").val().replace(/-p (.+)/, "-p " + "*".repeat(match[2].length))));
}
}
if (match !== null && match[2]) {
console.log("Password is: " + $('#hiddenPassword').val());
}
});
});
</script>
- 使用JavaScript将标题文本替换为按钮文本
- jQuery在用新文本替换HTML文本时淡出HTML文本,而不是仅显示
- 为什么不'使用此JavaScript将文本替换为不起作用的链接
- 将元素文本替换为子项中的值
- 使用 Jquery 将文本替换为笑脸图像
- 将页面上的文本替换为 jQuery 并提示文件下载
- 使用 JavaScript 将文本替换为图像
- 将 d3 演示中的圆圈和文本替换为包含自定义 HTML 和 ko 绑定的 foreignObject
- JavaScript无法用新文本替换文本
- 将表中的文本替换为用户友好的文本
- 将.onclick属性中的文本替换为javascript
- Javascript/Jquery.使用带通配符的正则表达式将纯文本替换为html
- 按名称将文本替换为 JavaScript 属性的内容
- 如何将 JSON 字符串中的文本替换为 Greasemonkey 的用户脚本
- Javascript:用文本替换整个锚点
- 在Chrome扩展程序中将文本替换为Treewalker
- 通过将文本替换为类来换行/中断列表元素
- 如何使用javascript将文本替换为彩色文本
- JavaScript - 消除文本替换的延迟
- j查询遍历和文本替换