8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

正则表达式允许字符串中有空格,但不仅仅允许有空格

Jack Ecuyer 2月前

36 0

我需要编写一个用于表单验证的正则表达式,允许字符串内有空格,但不允许只有空白。例如 - “芝加哥高地,伊利诺伊州”是有效的,但如果用户......

我需要编写一个用于表单验证的正则表达式,允许字符串内有空格,但不允许仅出现空白。

例如 - 'Chicago Heights, IL' 是有效的,但如果用户只是多次按下空格键并按下回车键,表单将不会验证。在验证之前,我尝试运行然后 if (foo != null) 运行正则表达式,但按下空格键仍然会记录字符,所以这不起作用。这是我现在正在使用的允许空格的方法:

^[-a-zA-Z0-9_:,.' ']{1,100}$
帖子版权声明 1、本帖标题:正则表达式允许字符串中有空格,但不仅仅允许有空格
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Jack Ecuyer在本站《regex》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 这很简单: .*\S.*

    这需要一个非空格字符,在任何地方。正则表达式语法适用于与 Perl 5 兼容的正则表达式,如果您使用其他语言,语法可能会略有不同。

  • 我没有将 100 视为要求,只是将其视为原始发帖者迄今为止尝试的内容。该限制可以表示为正则表达式,但由于正则表达式无法计算字符,因此编写起来会很麻烦。在这种情况下,完全忽略正则表达式并编写 s = s.trim(); if (s.length() >= 1 && s.length() <= 100) { ... } 要简单得多

  • 这当然取决于你使用的编程语言。我经常使用的语言(Java、Python、Perl)只在开头和结尾处进行修剪。

  • 以下内容将按原文回答您的问题,但请参阅我之后的补充说明:

    ^(?!\s*$)[-a-zA-Z0-9_:,.' ']{1,100}$
    

    解释: (?!\s*$) 负向前瞻它的意思是: \'以下字符无法匹配子模式 \s*$ 。\' 当您考虑子模式时,它的意思是: \'以下字符既不能是空字符串,也不能是一直到末尾的空格字符串。 因此,字符串中此点之后必须至少有一个非空格字符。\' 一旦掌握了该规则,您就可以自由地在字符类中允许空格。

    额外说明: 我认为你没有按照 ' ' 你的意图去做。看起来你试图表示一个空格字符,但正则表达式将其解释 ' 为文字撇号。在字符类中, ' ' 意味着\'匹配任何字符,无论是 ' 、空格字符还是 ' \'(请注意,第二个 ' 字符是多余的)。我怀疑你想要的更像是这样:

    ^(?!\s*$)[-a-zA-Z0-9_:,.\s]{1,100}$
    
  • Zulu 2月前 0 只看Ta
    引用 6

    这似乎就是我想要的,但出于某种原因,空白仍然通过了脚本中的正则表达式。你知道这是为什么吗?

  • MSX 2月前 0 只看Ta
    引用 7

    @user699242 - 嗯。它似乎在这里正常工作:rubular.com/r/V8nlkU7E5R 和一些字母:rubular.com/r/8qjj4Z2PWs。你使用的是什么正则表达式语言?

  • 您可以使用简单的:

    ^(?=.*\S).+$
    

    如果您的正则表达式引擎支持正向前瞻。此表达式至少需要一个非空格字符。

    上查看 rubular .

  • 如果我们只想使用允许的字符集进行验证,那么我尝试使用 USERNAME_REGEX = /^(?:\s*[.\-_]*[a-zA-Z0-9]{1,}[.\-_]*\s*)$/;

    • 字符串可以在开头、结尾或中间包含任意数量的空格,但至少包含一个字母数字字符。
    • 还允许使用 ., _ , - 可选
  • 尝试这个正则表达式:

    ^[^\s]+(\s.*)?$
    

    它的意思是一个或多个不是空格的字符,然后,可以选择一个空格后跟任何内容。

  • 引用 11

    只需使用 \s* 即可避免两个单词之间的正则表达式中出现一个或多个空格。

    例如, "Mozilla/ 4.75" "Mozilla/4.75" 都可以用以下正则表达式来匹配:

    [A-Z][a-z]*/\s*[0-9]\.[0-9]{1,2}
    

    添加 \s* 零个、一个或多个空格的匹配项。

返回
作者最近主题: