【发布时间】:2015-11-23 10:36:53
【问题描述】:
我正在验证 html 表单中的用户输入。我希望表单能够捕获任何空格和不允许的单词列表。
<td><input type="text" name="Name" pattern="^[^\s]+$|cow|horse" required ></td>
如果输入中有任何空格,则模式值“^[^\s]+$”的位似乎可以捕获。但是,如果输入牛或马,以下代码不会捕获/停止表单提交。有人可以给我建议吗?
【问题讨论】:
我正在验证 html 表单中的用户输入。我希望表单能够捕获任何空格和不允许的单词列表。
<td><input type="text" name="Name" pattern="^[^\s]+$|cow|horse" required ></td>
如果输入中有任何空格,则模式值“^[^\s]+$”的位似乎可以捕获。但是,如果输入牛或马,以下代码不会捕获/停止表单提交。有人可以给我建议吗?
【问题讨论】:
如果要断言输入字段:
\s 定义,相当于[ \f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff])cow 或horse
那么你可以使用下面的正则表达式:
^(?!(cow|horse)$)\S+$
由于input 标记的pattern 字段验证整个字符串 匹配模式,所以开头的^ 和结尾的$ 是多余的。
<input type="text" name="Name" pattern="(?!(cow|horse)$)\S+" required>
【讨论】:
您可以像这样使用 Javascript 进行验证:
<form name="testform" action="testpage.php" onsubmit="return validate()" method="post">
<input type="text" name="Name" pattern="^[^\s]+$" required>
<input type="submit">
</form>
<script>
function validate() {
var x = document.forms["testform"]["Name"].value;
if (x == "cow" || x == "horse") {
alert("can not be "+x);
return false;
}
}
</script>
这是一个工作示例:http://jsfiddle.net/y9mperc0/
【讨论】:
这是用于边界子字符串(单词) -
^(?:(?!\s|\b(?:cow|horse)\b)[\S\s])+$
^
(?:
(?!
\s
|
\b
(?: cow | horse )
\b
)
[\S\s]
)+
$
这是用于非边界子字符串 -
^(?:(?!\s|cow|horse)[\S\s])+$
^
(?:
(?!
\s
| cow
| horse
)
[\S\s]
)+
$
【讨论】:
if cow or horse is entered。这匹配 cow 或 horse,所以你错了,不是我..
cow or horse or whitespace。这就是它所做的一切。很可能根本没有调用正则表达式。你有某种形式的问题。