当前位置: 首页 > 知识库问答 >
问题:

Ruby 中的全名正则表达式

尹英华
2023-03-14

我知道有很多类似的问题,但我在任何地方都找不到我的案例。

我试图在Ruby on Rails用户模型中写一个全名正则表达式。它应该验证名字和姓氏是否填充了一个空格。这两个名字都应该包含至少两个字符(例如:马丽)。

作为一个奖励,但不是必须的,我想修剪空白到一个字符的情况下,用户将错误地输入一个以上的空白(例如:李

validates :name,
        presence: true,
        length: {
            maximum: 64,
            minimum: 5,
            message: 'must be a minimum: 5 letters and a maximum: 64 letters'},
        format: {
            # Full Name RegEx
            with: /[\w\-\']+([\s]+[\w\-\']){1}/
        }

这对我有效,但是不检查每个名字的最少2个字符(例如:Peter P现在是正确的)。这也接受多个空格,这是不好的(例如:彼得

我知道这个识别名字的问题是非常以文化为中心的,它可能不是验证全名的正确方法(也许有些人只有一个角色名字),但这是目前的要求。

我不想把这个字段分成两个不同的字段,名字和姓氏,因为这将使用户界面变得复杂。

共有2个答案

孔鸿云
2023-03-14
result = subject.gsub(/\A(?=[\w' -]{5,64})([\w'-]{2,})([\s]{1})\s*?([\w'-]{2,})\Z/, '\1\2\3')

http://regex101.com/r/dT1fJ4

Assert position at the beginning of the string «^»
Assert that the regex below can be matched, starting at this position (positive lookahead) «(?=[\w' -]{5,64})»
   Match a single character present in the list below «[\w' -]{5,64}»
      Between 5 and 64 times, as many times as possible, giving back as needed (greedy) «{5,64}»
      A word character (letters, digits, and underscores) «\w»
      The character “'” «'»
      The character “ ” « »
      The character “-” «-»
Match the regular expression below and capture its match into backreference number 1 «([\w'-]{2,})»
   Match a single character present in the list below «[\w'-]{2,}»
      Between 2 and unlimited times, as many times as possible, giving back as needed (greedy) «{2,}»
      A word character (letters, digits, and underscores) «\w»
      The character “'” «'»
      The character “-” «-»
Match the regular expression below and capture its match into backreference number 2 «([\s]{1})»
   Match a single character that is a “whitespace character” (spaces, tabs, and line breaks) «[\s]{1}»
      Exactly 1 times «{1}»
Match a single character that is a “whitespace character” (spaces, tabs, and line breaks) «\s*?»
   Between zero and unlimited times, as few times as possible, expanding as needed (lazy) «*?»
Match the regular expression below and capture its match into backreference number 3 «([\w'-]{2,})»
   Match a single character present in the list below «[\w'-]{2,}»
      Between 2 and unlimited times, as many times as possible, giving back as needed (greedy) «{2,}»
      A word character (letters, digits, and underscores) «\w»
      The character “'” «'»
      The character “-” «-»
Assert position at the end of the string (or before the line break at the end of the string, if any) «$»
宦正诚
2023-03-14

您可以匹配以下正则表达式

/([\w\-\']{2,})([\s] )([\w\-\']{2,})/

并替换为:(假设它支持捕获组)

'\1\3'$1$3无论语法是什么:

它去掉了多余的空格,只保留一个,正如你所希望的。

演示:http://regex101.com/r/oQ6aO7

 类似资料:
  • 主要内容:语法,实例,正则表达式修饰符,正则表达式模式,正则表达式实例,字符,字符类,特殊字符类,重复,非贪婪重复,通过圆括号进行分组,反向引用,替换,锚,圆括号的特殊语法,搜索和替换,实例,实例正则表达式是一种特殊序列的字符,它通过使用有专门语法的模式来匹配或查找字符串集合。 正则表达式用事先定义好的一些特定字符、及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑。 语法 正则表达式从字面上看是一种介于斜杠之间或介于跟在 %r 后的任意分隔符之间的模

  • 本文向大家介绍详细介绍Ruby中的正则表达式,包括了详细介绍Ruby中的正则表达式的使用技巧和注意事项,需要的朋友参考一下 正则表达式是一种特殊序列的字符,它通过使用有专门语法的模式来匹配或查找其他字符串或字符串集合。 语法 正则表达式从字面上看是一种介于斜杠之间或介于跟在 %r 后的任意分隔符之间的模式,如下所示: 这将产生以下结果: 正则表达式修饰符 正则表达式从字面上看可能包含一个可选的修饰

  • 问题内容: 刚刚开始探索正则表达式的“奇迹”。作为一个从试验和错误中学习的人,我真的很努力,因为我的试验抛出了不成比例的错误……我的实验是在PHP中使用ereg()进行的。 无论如何。我分别使用名字和姓氏,但现在使用相同的正则表达式。到目前为止,我有: 任何以大写字母开头且其余仅包含字母(大写或不大写)的长度字符串。但是我分崩离析的地方是在几乎任何地方都可能发生的特殊情况下。 连字符(Worthi

  • 本文向大家介绍Ruby定义一个正则表达式,包括了Ruby定义一个正则表达式的使用技巧和注意事项,需要的朋友参考一下 示例 可以在Ruby中以三种不同的方式创建Regexp。 使用斜杠: / / 使用 %r{} 使用 Regex.new

  • 本文向大家介绍最全的常用正则表达式大全,包括了最全的常用正则表达式大全的使用技巧和注意事项,需要的朋友参考一下 很多不太懂正则的朋友,在遇到需要用正则校验数据时,往往是在网上去找很久,结果找来的还是不很符合要求。所以我最近把开发中常用的一些正则表达式整理了一下,包括校验数字、字符、一些特殊的需求等等。给自己留个底,也给朋友们做个参考。 一、校验数字的表达式 数字:^[0-9]*$ n位的数字:^\

  • 昨天,我需要向正则表达式添加一个文件路径,创建一个如下所示的模式: 一开始正则表达式不匹配,因为包含几个正则表达式特定的符号,如 或 。作为快速修复,我将它们替换为 和 . 与 . 然而,我问自己,是否没有一种更可靠或更好的方法来清除正则表达式特定符号中的字符串。 Python 标准库中是否支持此类功能? 如果没有,您是否知道一个正则表达式来识别所有正则表达式并通过替代品清理它们?