只允许HTML字段以某些单词开头
Only allow HTML field to start with certain words
是否有一个快速的javascript库或代码只允许用户使用预设的单词选择来启动表单输入?
例如,它允许用户以单词"Are"或"What"开头,但不允许以"Why"开头。
您可以使用以下Regex。(这真的很原始,应该根据您的情况进行改进。)
^(Why|Are).*$
HTML5输入模式示例:
<form>
<input type="text" pattern="^(Why|Are).*$">
<input type="submit">
</form>
在这里测试。
您可以将change
或input
事件侦听器添加到其中并验证内容。为了避免首字母为几个的假阴性,可以在输入字符串包含空格后开始检查。你不需要图书馆就可以做到这一点。普通的老JS会做这项工作。
var input = document.getElementById("myinput");
input.addEventListener('input', validate);
function validate(e) {
var validStart = ['why', 'when'];
var tmpVal;
if (this.value.indexOf(' ') !== -1) {
tmpVal = this.value.toLowerCase().trim();
if (validStart.indexOf(tmpVal) === -1) {
input.classList.add('notvalid');
} else {
input.classList.remove('notvalid');
}
} else {
input.classList.remove('notvalid');
}
}
JSFiddle:http://jsfiddle.net/ofx2yhzm/1/
与Strah的答案非常相似,但无论如何都是这样:
function checkValue(el) {
// Trim only leading whitespace so responds when first space entered
// and break into words
var words = el.value.replace(/^'s+/,'').split(/'s+/);
// List of allowed words
var allowed = ['are','what'];
// Element to write message based on source element
var msg = document.getElementById(el.id + 'Msg');
// Clear error message by default
msg.innerHTML = '';
// Only do something if at least one word has been entered
// Could also check if first word has more letters than
// longest allowed word
if (words.length > 1) {
// Check if first word is allowed
if ( allowed.indexOf(words[0].toLowerCase()) == -1) {
msg.innerHTML = 'Input must start with one of ' + allowed.join(', ');
}
}
}
一些标记:
<input id="foo" oninput="checkValue(this);">
<span id="fooMsg"></span>
这允许用户在出现错误之前至少输入一个单词。他们还应该在屏幕上得到一些提示,让他们知道该用哪个词,而不是必须先弄错(这种情况肯定会发生很多)。
Html:
<form name="myform" method="post" action="#" onsubmit="return validate()">
<input type="text" name="val" />
<input type="submit" value="Submit" />
</form>
Javascript:
window.validate = function(){
data = document.forms['myform']['val'].value;
var starts = ['hi','he'];
for (var i = 0; i <= starts.length; i++)
if (data.indexOf(starts[i]) === 0) return true;
return false;
}
当然,你也可以使用Regex,我想这会有点效率低下。
像这样的东西?:http://jsfiddle.net/4jasrbob/
相关文章:
- 将组成单词的字符添加到数组的开头
- 匹配由单个空格分隔的单词,单词的开头或结尾不能有空格
- 如何在搜索框中获取从特定字母开头的单词
- 如何使用 JavaScript 获取所有以单词开头的 cookie
- 如何将有角度的文本区域设置为仅以特定单词开头
- Regex,替换所有以@开头的单词
- Javascript正则表达式匹配多个单词中至少一个以数字开头的单词,但至少匹配两个单词
- 如何隐藏所有以相同单词开头的 DIV,但一个具有特定值的 DIV 除外
- 替换以下划线开头的单词
- 正则表达式保留/匹配任何以特定字符开头的单词
- 获取以@开头的单词,例如正则表达式和javascript提到的Facebook
- JavaScript单词搜索,从单词的开头开始带空格和不带空格
- JavaScript正则表达式搜索每个单词和后续单词的开头
- 以相同元音字母开头和结尾的匹配单词
- 只允许HTML字段以某些单词开头
- 计算以特定单词开头的行中的单词数
- 如何在字符串中查找以一个单词开头并以另一个单词结尾的文本的第一次出现
- 删除字符串中单词开头和结尾的标点符号
- 匹配所有以特定单词开头和结尾的摘录
- 如何获取以单词开头的跨度 ID