如何在猫鼬中大写字符串?

Posted

技术标签:

【中文标题】如何在猫鼬中大写字符串?【英文标题】:How can i capitalize strings in mongoose? 【发布时间】:2015-03-22 21:12:06 【问题描述】:

我有我的架构:

Schema = 
 name: String,
 email: String,
 animal: String
;

我知道猫鼬有一些方法可以帮助我大写、小写,甚至修剪我的字符串,但是大写呢?我希望我只能将姓名和电子邮件的首字母大写。

我该怎么做??

我正在使用表单来捕获数据,它们使用 post 路由保存在我的数据库中,并且有一些用户输入全小写,我正在尝试用 css 处理这个问题。

input#name 
 text-transform: capitalize;

但这不起作用。

【问题讨论】:

您是否需要处理多种语言,如果需要,哪些是? 我几乎所有东西都在使用 javascript @unobf 哦,对不起,我需要葡萄牙语的支持,但这很重要吗?字符串只是字符串.. 不是吗? 所以你没有移民,比如说有人叫 al-Hussein,或者像 deGeneres 等姓氏? 而这个现在是this的副本,下面的答案是直接复制/粘贴 【参考方案1】:

最好的方法是在功能中使用 Mongooses Baked - 应该这样做!

Schema = 
 name:
    type: String,
    uppercase: true
 ,
 email: String,
 animal: String
;

【讨论】:

这会将整个文本转换为大写。 OP 只需要前面提到的首字母大写。【参考方案2】:

CSS 样式仅在可见端,而不在数据端。

您必须使用 Javascript 来执行此操作:

schema.pre('save', function (next) 
  // capitalize
  this.name.charAt(0).toUpperCase() + this.name.slice(1);
  next();
);

编辑:正如 Luis Febro 在下面的 cmets 中提到的,当前的实现保持字符串其余部分的大写/小写拼写。如果你真的想确保只有第一个字母大写,其余的都是小写字母,你可以像这样调整代码:

this.name.charAt(0).toUpperCase() + this.name.slice(1).toLowerCase()

【讨论】:

我想大写,而不是小写@schlenger 对不起,读错了。现在应该是正确的解决方案。 昨天我找到了schema.pre,但我并不是说我能做到这一点..这就是我喜欢js的原因,我什么都能做!哈哈.. 谢谢 schlenger,我会在 5 分钟内接受你的回答。 如果用户输入像:hELEN,这个回调返回所有的大写字母。这应该适用于所有情况:this.name.charAt(0).toUpperCase() + this.name.slice(1).toLowerCase() @LuisFebro 是的,你是对的。但是,您可能希望保留输入字符串的现有大写字母。尽管如此,这是一个很好的附加输入。我会编辑答案【参考方案3】:

最佳实践

schema.pre("save", function(next) 
  this.name =
    this.name.trim()[0].toUpperCase() + this.name.slice(1).toLowerCase();
    next();
);

【讨论】:

嗨!这似乎与投票最高的现有答案相同。你有什么不同的推荐?你能解释一下为什么这个答案不是最好的吗? 猫鼬内置装饰怎么了?这是最佳实践吗?【参考方案4】:

为了将字符串中的所有单词大写,你可以试试这个...

personSchema.pre('save', function (next) 
  const words = this.name.split(' ')
  this.name = words
    .map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase())
    .join(' ')
  next()
)

如果你有一个复合名称很有用... 'john doe' => 'John Doe'

【讨论】:

【参考方案5】:

当您在 JavaScript 中输出名称时,您可以创建一个名称大写的新字符串。

var capName = user.name[0].toUpperCase() + user.name.slice(1);

这会将第一个字母大写并将其与字符串的其余字母组合以将单词大写并将其保存在新变量中。

【讨论】:

这不会阻止有人点击您的 API 并发布小写字母,您需要在 API/DB 级别执行此操作【参考方案6】:

String 子部分下的 mongoose doc here 中,您将找到所有可以应用于您的架构选项的函数。

Schema = 
 email: type: String, lowercase: true, trim: true,
 animal: type: String
;

【讨论】:

以上是关于如何在猫鼬中大写字符串?的主要内容,如果未能解决你的问题,请参考以下文章

在猫鼬中匹配具有字符串值的数组?

在猫鼬中匹配具有字符串值的数组?

为啥我无法在猫鼬查询中获取字符串的值?

使用种子字符串在猫鼬中创建 ObjectId

使用种子字符串在猫鼬中创建 ObjectId

在猫鼬上自定义 json 输出