【问题标题】:HTML pattern attribute for space and list of words空格和单词列表的 HTML 模式属性
【发布时间】:2015-11-23 10:36:53
【问题描述】:

我正在验证 html 表单中的用户输入。我希望表单能够捕获任何空格和不允许的单词列表。

<td><input type="text" name="Name" pattern="^[^\s]+$|cow|horse" required ></td>

如果输入中有任何空格,则模式值“^[^\s]+$”的位似乎可以捕获。但是,如果输入牛或马,以下代码不会捕获/停止表单提交。有人可以给我建议吗?

【问题讨论】:

    标签: regex html forms web


    【解决方案1】:

    如果要断言输入字段:

    • 不包含任何空白字符(由\s 定义,相当于[ \f\n\r\t\v​\u00a0\u1680​\u180e\u2000​-\u200a​\u2028\u2029\u202f\u205f​\u3000\ufeff]
    • 不是空字符串
    • 不等于cowhorse

    那么你可以使用下面的正则表达式:

    ^(?!(cow|horse)$)\S+$
    

    由于input 标记的pattern 字段验证整个字符串 匹配模式,所以开头的^ 和结尾的$ 是多余的。

    &lt;input type="text" name="Name" pattern="(?!(cow|horse)$)\S+" required&gt;

    【讨论】:

    • 谢谢伙计。这是问题的正确答案。这个答案正是我想解决我的问题的方式。但由于我已经接受了 javascript 解决方案,因此我无法将其标记为答案。感谢您的回答,因为这将有助于未来的参考并帮助其他人解决类似的问题。
    • 我有一长串单词,我想输入断言,因此 javascript 解决方案可能更适合我的任务。
    【解决方案2】:

    您可以像这样使用 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/

    【讨论】:

    • 感谢您的回复。我试过了,效果很好:) 我真的很想避免使用任何脚本,只在 html 中执行所有操作。但事实是我确实有一长串单词,所以最后可能有一个干净的脚本来处理它们会很好。再次感谢。如果您确实知道使用 HTML 的解决方案,那么很高兴知道进一步的参考。谢谢。
    • 如果您的列表很长,最好将它们存储在这样的数组中:jsfiddle.net/y9mperc0/1
    • 谢谢伙计。正是我想要实现的。看起来 Javascript 方法会很干净。
    【解决方案3】:

    这是用于边界子字符串(单词) -

    ^(?:(?!\s|\b(?:cow|horse)\b)[\S\s])+$

     ^ 
     (?:
          (?!
               \s 
            |  
               \b 
               (?: cow | horse )
               \b 
          )
          [\S\s] 
     )+
     $
    

    这是用于非边界子字符串 -

    ^(?:(?!\s|cow|horse)[\S\s])+$

     ^ 
     (?:
          (?!
               \s 
            |  cow
            |  horse
          )
          [\S\s] 
     )+
     $
    

    【讨论】:

    • 感谢您的回复。不幸的是,它不起作用。
    • @Saed - 任何细节或原因?你的话if cow or horse is entered。这匹配 cowhorse,所以你错了,不是我..
    • 如果问题不够清楚,我深表歉意。就像我在问题中提到的那样:“但是,如果输入牛或马,以下代码不会捕获/停止表单提交。”,我希望在输入牛或马时停止表单提交。表单提交刚刚完成,没有任何无效通知。谢谢。
    • @Saed - 那么它不是正则表达式。上面的正则表达式不会匹配字符串中的任何地方的cow or horse or whitespace。这就是它所做的一切。很可能根本没有调用正则表达式。你有某种形式的问题。
    猜你喜欢
    • 2021-10-08
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    • 2015-03-20
    • 1970-01-01
    • 2013-09-16
    相关资源
    最近更新 更多