【问题标题】:How to use javascript regex to check for "empty" form fields?如何使用 javascript 正则表达式检查“空”表单字段?
【发布时间】:2011-01-16 00:10:54
【问题描述】:

我正在开发一个基于 php+javascript 的项目,并且已经在以下位置制作了一个模型页面: my website

我知道如何使用 javascript 或 php 来检查表单的特定字段是否“空”,即它是否包含除白字符以外的字母数字字符(例如,空格、制表符和换行符)。

但是,由于我现在使用的 jquery 插件依赖于正则表达式来验证字段,因此我的正常方法不再有效。

如果您转到第三个选项卡(3. 填写运输信息并付款),您可以在名字字段中输入一些内容,它会自动进行检查。美好的。然而,如果 你只是简单地放一些空格字符然后跳到下一个字段,嗯,这感觉还可以,这是不正确的,因为没有人的名字什么都不是!

问题?在后面它有一个像这样的正则表达式:

"noSpecialCaracters":{
                    "regex":"/^[0-9a-zA-Z ]+$/",
                    "alertText":"* No special caracters allowed"},

这不会过滤掉空字符。

我在网上搜了一下,尽力补了一个正则表达式来匹配,我试过了

"regex":"/^[^]+$/"

用于匹配非空字符,但这不会...

谁能帮帮我?非常感谢!

【问题讨论】:

  • 您使用的是哪个验证插件?如果是 bassistance 的 Validation,它有一个 JSON 属性可以传入。用法:required: true
  • 嗨,Alex,这是插件页面:position-absolute.com/articles/…

标签: javascript jquery regex


【解决方案1】:

试试这个非空白:

([^\s]*)

例子:

/([^\s])/.test("   A"); //TRUE
/([^\s])/.test("    "); //FALSE

【讨论】:

  • 嗨尼克:我试过 [code] "regex":"/^([^\s]*)$/", [/code] 和 [code] "regex":"/^ [^\s]*$/", [/code] 但两者都不起作用。抱歉,我根本不是正则表达式的专家...
  • 嗨尼克:是的,它适用于香草 javascript。但是对于插件......它仍然不行。这不是我认为的正则表达式问题。可能其他地方有问题。感谢您的帮助!
  • @Michael - 我会在早上拿到那个插件并测试,明天午餐时检查你的 SO 消息,这让我很好奇。
  • @Nick :非常感谢。请慢慢来。我不担心这个:)
  • @Michael - 问题是插件在某些情况下无法重新验证,不确定您想要修复该问题的路线。我正在使用更成熟的 jquery.validate 插件......你可以做同样的事情,你只需要坚持一些 errorPlacement 代码,让它在显示上更漂亮。
【解决方案2】:

您可能想尝试将您的表达式包装在以下^\s*(expression)\s*$ 中。然后使用这些组来查找“修剪过的”匹配项。这只会消除尾随或前导空格。

您可以强制用户输入修剪后的文本,也可以优雅地接受未修剪的输入(更好),因为我发现复制和粘贴文本通常会留下一些用户可能不知道的尾随或前导空格。

【讨论】:

    【解决方案3】:
    /^\s*[0-9a-zA-Z][0-9a-zA-Z ]*$/
    

    确保至少有一个字符不是空格并且是允许的字符之一。

    您可能还需要考虑也可能出现在名称中的其他字符,例如连字符 (-) 或撇号 (')...

    /^\s*[0-9a-zA-Z][0-9a-zA-Z '-]*$/
    

    【讨论】:

    • 嗨,Charles:确实,我可以强制用户不要输入任何前导空格,这在这种情况下肯定会对我有所帮助。但是,我仍然想知道如何解决这个问题,当然,在你们的帮助下。
    • 好吧,如果你希望他们能够有前导空格,那么应该这样做 /^\s*[0-9a-zA-Z][0-9a-zA-Z ]* $/
    【解决方案4】:

    为了回答您的问题,最小的正则表达式是/\S/,只要至少有一个非空白字符,它就会匹配。

    但是,您可能不希望有人输入“12345”或“!!!”的名字,因此最好使用/[a-z]/i,因为此正则表达式仅在至少有一个字母字符。

    【讨论】:

      【解决方案5】:
      function anyChar(str){
          return /\S+/.test(str);
      }
      

      如果数据为空则返回 false

      【讨论】:

        【解决方案6】:

        我正在使用

        /^\s*\S+.*/
        

        意思是

        • 零个或多个空白字符 (\s*),后跟
        • 一个或多个非空白字符 (\S+),后跟
        • 任何内容,无论是否有空格 (.*)。

        这允许单个单词或多个单词。我在开头允许空格,因为我知道在开头错过一个空格是多么容易,并且对于为什么不允许您的输入感到非常困惑:|

        Mozilla 开发者网络有一个很棒的JavaScript regex page 供参考。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-07-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多