强制表单文本为小写
Forcing form text to be lower-case
无论用户类型如何,我如何强制"username"文本input
中的文本为小写?
<div class="register">
<label for="username">Select username:</label>
</div>
<div class="registerform">
<input name="username" class="registerfont" type="text"
id="username" maxlength="15" style="height:35px; width:300px">
</div>
要使它看起来像文本是小写的,在提交给服务器或复制粘贴时不改变实际字段的值,使用以下CSS:
form input[type="text"] {
text-transform: lowercase;
}
如果你想在JavaScript中小写一个字符串,使用以下代码:
var text = "This Is My Text.";
var lowercase = text.toLowerCase();
你必须使用javascript。我这里有一个例子:http://jsfiddle.net/xCfdS/3/
HTML:<input type="text" id="txt" onkeyup="return forceLower(this);"/>
function forceLower(strInput)
{
strInput.value=strInput.value.toLowerCase();
}
要关闭移动浏览器虚拟键盘上单词的自动大写,使用以下代码:
<input autocapitalize="none" ></input>
它应该可以在最新的移动浏览器中工作。更多详细信息请查看此链接。
这不会阻止用户故意选择输入大写字母。
使用jquery假设输入ID是username这可以帮助:
脚注:感谢@ limm评论,我修改了原始答案,增加了两行,以防止光标不在结束位置时光标跳到输入的末尾。
$(document).ready(function(){
$("#username").on('change keyup paste',function(e){
//preserving the position of the cursor
var start = e.target.selectionStart;
//Converting text to lowercase
$(this).val($(this).val().toLowerCase());
//Jumping back to the old position of the cursor
e.target.selectionStart = e.target.selectionEnd = start;
})
})
@fdiv_bug的回答是好的,除了在他们的回答的评论中提到的问题。使用输入事件而不是keyup事件为我修复了这些问题。
HTML:<input oninput="this.value=this.value.toLowerCase()"/>
Javascript: element.addEventListener('input',function(){this.value=this.value.toLowerCase()});
结合每个人的答案来简化事情。
-
使用CSS来避免任何闪烁和显示。
input[type="username"] { text-transform: lowercase; }
现在,因为这只影响浏览器中文本的显示,我们还需要改变输入的值。
-
为输入添加一个事件监听器。
const usernameInput = document.querySelector('input[type="username"]'); usernameInput.addEventListener("input", function(e){ e.target.value = e.target.value.toLowerCase(); });
我们可以像正常一样将其发送到服务器,并且像其他人提到的那样,检查服务器端以确保恶意用户没有向我们发送UpPPercaSe输入。
这是我的建议,它是基于来自@fdiv-bug &@ali-sheikhpour:
- 添加text-transform:小写;
input[type="email"] {
text-transform: lowercase;
}
- 捕获该字段的"change"事件,并通过(String)toLowerCase函数将值转换为小写
var upperCaseMatch = /[A-Z]/;
var events = {
CHANGE: 'change'
};
$(function() {
$(document).on('change', 'input[type="email"]', function() {
var value = $(this).val();
if (!upperCaseMatch.test(value)) {
return;
}
$(this).val(value.toLowerCase());
});
});
老问题。新答案。
现在所有主流浏览器都支持HTML5表单验证(2021),使用pattern属性在客户端输入字段上强制使用小写文本相对简单。(pattern
属性在编写本文时,除了Opera Mini之外,其他所有版本都支持)。
<label>Field Name (lowercase letters only)</label>
<input type="text" pattern="[a-z]" placeholder="Field Name (lowercase letters only)">
注意:下面的内容来自问题,但超出了问题的范围。
在电子邮件地址字段上强制使用小写(这就是我遇到这个问题的原因)似乎更有风险,因为使用pattern
/rejex来验证电子邮件地址相当复杂,并且与type="email"一起实现pattern
存在潜在的问题。
撇开上面的内容不谈,对于我的用例,下面的pattern
就足够了:
<label>Email Address (lowercase letters only)</label>
<input type="email" pattern="[^A-Z]+" placeholder="Email Address (lowercase letters only)">
rejex表达式[^A-Z]+
允许任何非大写字符。我通过type="email"
将实际的电子邮件地址验证留给浏览器。我在Chrome、Firefox、Edge和IE11的台式机上测试了一下,结果都很好。
我使用这个简单的代码:
<input type="text" onkeyup="this.value = this.value.toUpperCase();">
使用onchange代替
<input name="username"
onchange="this.value = this.value.toUpperCase();"
style="text-transform: lowercase; height:35px; width:300px"
class="registerfont"
type="text"
id="username"
maxlength="15"
>
这个JavaScript将在用户输入文本时将文本转换为小写。它会记住光标的位置,以避免当用户在现有文本的中间输入一个字符时,光标被设置为结束。
我还将autocapitalize
设置为off
,以便在移动浏览器的虚拟键盘上不会自动显示大写字母。
var element = document.querySelector("input");
element.addEventListener('input', function(e) {
const position = e.target.selectionStart;
// Lowercase the text, which happens to also reset the selection:
e.target.value = e.target.value.toLowerCase();
// Restore the cursor position to where it was:
e.target.setSelectionRange(position, position);
});
<input type="text" autocapitalize="off">
如果用户在
中粘贴内容,setInterval()
将运行setInterval(function(){
let myinput = document.getElementById('myinput');
//make lowercase
myinput.value = myinput.value.toString().toLowerCase();
//remove spaces (if you want)
myinput.value = myinput.value.toString().replace(' ', '');
//force specific characters
myinput.value = myinput.value.toString().replace(/[^a-z0-9'/'-_]/, '');
}, 10);
因为这是一个使用.replace()
的循环函数,每次只替换第一个出现,但仍然循环所有出现,这看起来像是动画删除粘贴文本上的空格。
使用jquery假设输入ID是username:
$(document).ready(function(){
$("#username").on('input', function(){
$(this).val( $(this).val().toLowerCase() );
})
});
- 当选择值x时,Javascript需要在正确的位置显示文本区域,从而循环通过具有选择选项的表单
- 输入文本框为空时的阻止按钮asp.网络表单
- 或者在表单上选择默认选项文本(选择1)
- 提交表单后,Watir文本框输入未持续(重置为以前的文本框输入)
- 提交表单时,Javascript(JQuery)不会在文本区域中填充内容
- 表单输入字段随着溢出的文本而增长
- 表单文本框未自动更新
- 使用javascript提交表单并从字段/单选框/复选框/文本区域获取数据
- 单击时从表单中删除特定文本
- 在HTML表单中键入时返回文本
- 使用jquery在悬停时展开文本表单
- 将从服务器获取的数据加载到输入文本表单中
- 如何使用文本表单输入的一部分来添加并使其转到 URL
- 将HTML中的文本表单值输入到Javascript函数中
- JS救援文本表单
- 使用crypto.js创建文本表单生成器
- 如何在将逗号提交到服务器之前,使用JS删除输入文本表单中的逗号
- 文件上传和数据(文本)表单转化为HTML表格
- Javascript禁用/启用输入文本表单
- 输入文本表单,使用javascript清除并恢复表单内容的问题