【问题标题】:Regular expression: at least one blank space enclosed by any character正则表达式:至少一个空格被任何字符包围
【发布时间】:2015-12-24 12:35:17
【问题描述】:

我想强制我的用户在字符串中至少包含两个单词,除以空格。

允许任何字符串在左侧和右侧至少有一个空格并由至少一个字符包围。前面没有空格,最后没有空格。

一些例子:

  • John Doe(有效)
  • John Walter Doe(有效)
  • 约翰(无效)
  • 约翰$ole(有效)
  • 3d3n 1snt f4r(有效)
  • 约翰三世(有效)
  • Jöning Wölter(有效)
  • Joe Garçon(有效)
  • Harald Spaß(有效)

仅供参考:我想将其用于非常弱的全名检查。由于名称中可能出现许多特殊字符,我只是希望我的用户强制在一个字符串中至少包含两个单词。

【问题讨论】:

    标签: regex validation


    【解决方案1】:

    如果我理解您的要求,它在正则表达式中的翻译如下:

    ^\S+\s+.*\S$
    

    如果你希望你的空白只是“”,那么使用

    ^\S+ +.*\S$
    

    但请注意,您在这里做出文化假设。实名制没有严格的规定。

    【讨论】:

    • 嗯,我想至少有一个名字和一个姓氏是很常见的。不是吗?
    • 这很常见,是的。并不意味着这是一个规则。 TBH 这个正则表达式比我们通常在这种情况下看到的要合理得多。
    • 此解决方案使用 .* ,这对性能来说可能很糟糕。它还将匹配 any 空格,例如换行符、制表符等
    • @DenysSéguret 谢谢。这确实是非常有用的知识。
    【解决方案2】:

    这匹配一个单词后跟一组或多组空格+单词

    /^\S+(\s+\S+)+$/
    

    它确实匹配任何空格,但也许如此

    /^\S+( +\S+)+$/
    

    会更好

    【讨论】:

    • 它允许在前面和结尾处留有空格。你能改变你的答案以防止这种情况发生吗?
    【解决方案3】:

    试试这样的:

    ^(\S+)(\s{1}\S+)+$
    

    【讨论】:

    • 为什么第一个单词要加括号?
    • 我的错。只是为了区分两种不同的模式,但没什么用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 2011-04-02
    相关资源
    最近更新 更多