【问题标题】:Disable tags and numbers alone in input form with jQuery使用 jQuery 在输入表单中单独禁用标签和数字
【发布时间】:2017-05-17 08:27:03
【问题描述】:

我有一个表格,我想单独禁用 < > # @ 和数字(“测试 123”应该可以工作)。

对于我尝试的第一个条件

if ( $(this).val().match("^[^>#<@*]+$") ) { // todo }

但它每次都匹配..

我已经检查过 Stackoverflow、W3Schools 等,但我不知道为什么我不能应用正则表达式

谢谢

【问题讨论】:

  • 5等数字?这个要求是什么意思?
  • 我的意思是,如果该值仅等于一个数字(如 int),则它不应该工作。
  • 试试.match(/^(?!\d+$)[^&gt;#&lt;@*]+$/)。不过,我宁愿将它与 RegExp#test 方法一起使用。 /^(?!\d+$)[^&gt;#&lt;@*]+$/.test(s).
  • 在下面查看我的答案。我添加了解释。

标签: jquery regex forms input textarea


【解决方案1】:

你需要在你使用的模式中添加一个否定的lookbehind并定义正则表达式

/^(?!\d+$)[^>#<@*]+$/

regex demo(注意\n是添加的,因为演示输入字符串包含换行符)。

详情

  • ^ - 字符串开头
  • (?!\d+$) - 输入字符串不能只包含 1 位以上的数字
  • [^&gt;#&lt;@*]+ - 除&gt;#&lt;@* 之外的 1 个或多个字符
  • $ - 字符串结束。

将它与RegExp#test 一起使用以仅返回truefalse(与String#match 一起使用,与返回所有具有您不需要的值的数组相关的开销是不必要的):

if (/^(?!\d+$)[^>#<@*]+$/.test($(this).val())) {....} 

【讨论】:

  • 也可以,谢谢!! ,我给你绿色检查,因为你解释我比其他答案更好
  • @XavierC.:实际上,这是符合您原始要求的答案。如果第二行没有数字,而不是第一行,Gawil 的答案将失败,并且 Bhushan 的解决方案只匹配字符串中包含 1+ 字母数字或空格字符 anywhere 的任何字符串。如果您否定测试检查,您将匹配不包含这些字符的字符串。我相信我的答案是唯一正确的。
  • 是的,我看到你的 RegEx 就明白了,A+ 伙计!
【解决方案2】:

如果我理解正确,您希望匹配至少包含一个非数字字符且不包含以下字符的字符串:&lt;, &gt;, # and @
你可以用这个正则表达式做到这一点:
(?=.*\D)[^&lt;&gt;#@]*

【讨论】:

    【解决方案3】:

    试试下面:使用 RegExp 对象,您可以测试如下所示的模式

    var regEx = new RegExp("[0-9a-zA-Z\\s]+"); 
    if ( regEx.test($(this).val()) ) 
    

    【讨论】:

    • 这匹配数字
    猜你喜欢
    • 1970-01-01
    • 2012-07-07
    • 2014-10-19
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    相关资源
    最近更新 更多