Ruby 尝试验证字符串只包含数字或字母(并且可以包含空格)

Ruby 尝试验证字符串只包含数字或字母(并且可以包含空格),ruby,regex,ruby-on-rails-4,Ruby,Regex,Ruby On Rails 4,我正在尝试对字符串进行验证,但由于某些原因,特殊字符不断出现,我无法找出这里缺少了什么 这是我目前在模型中拥有的 validates :name, presence: true, uniqueness: true, format: { with: /[a-z0-9A-Z]/ , :message => "is not valid" } 我也试过了 validates :name, presence: true, uniqueness: true, format: { with:

我正在尝试对字符串进行验证,但由于某些原因,特殊字符不断出现,我无法找出这里缺少了什么

这是我目前在模型中拥有的

  validates :name, presence: true, uniqueness: true, format: { with: /[a-z0-9A-Z]/ , :message => "is not valid" }
我也试过了

  validates :name, presence: true, uniqueness: true, format: { with: /\A[a-z0-9A-Z]\z/ , :message => "is not valid" }
我需要验证字符串中是否只有字母或数字,并且可以有空格。因此,
test 03
将有效,但
test***
将无效。出于某种原因,即使我在这里运行正则表达式时,它与那些字符不匹配,最后一个仍然能够通过,我想这会导致验证失败


任何帮助都将不胜感激。

我不使用RUBY,但是,请尝试此正则表达式语法-这只需要a-zA-Z0-9和至少一个字符:

/\A[a-z0-9A-Z ]+\z/
或者,如果字符串的长度为0:

/\A^[a-z0-9A-Z ]*\z/

--更新后包含了对空格的支持,我没有使用RUBY,但是,请尝试此正则表达式语法-这只需要a-zA-Z0-9和至少一个字符:

/\A[a-z0-9A-Z ]+\z/
r = /
    \A            # match the beginning of the string
    [ \p{Alnum}]  # match a space, digit or Unicode letter in a character class
    +             # repeat one or more times
    \z            # match the end of the string
    /x            # free-spacing regex definition mode

"I am told that 007 prefers zinfandel to rosé".match? r
  #=> true 
"007, I am told, prefers zinfandel to rosé".match? r
  #=> false
或者,如果字符串的长度为0:

/\A^[a-z0-9A-Z ]*\z/
--更新以包括对空间的支持

r = /
    \A            # match the beginning of the string
    [ \p{Alnum}]  # match a space, digit or Unicode letter in a character class
    +             # repeat one or more times
    \z            # match the end of the string
    /x            # free-spacing regex definition mode

"I am told that 007 prefers zinfandel to rosé".match? r
  #=> true 
"007, I am told, prefers zinfandel to rosé".match? r
  #=> false
注意,“
\p{}construct
\p{Alnum}
(或类似的POSIX表达式
[:Alnum:]
)不仅对非英语文本有用,而且对已经进入英语语言的带有变音符号的单词也有用,例如“rose”(不能很好地写成“rose”)。这些表达式记录在(在文件中搜索)


注意,“
\p{}construct
\p{Alnum}
(或类似的POSIX表达式
[:Alnum:]
)不仅对非英语文本有用,而且对已经进入英语语言的带有变音符号的单词也有用,例如“rose”(不能很好地写成“rose”)。这些表达式记录在(在文件中搜索)

因此,我得到了一个失败的验证,我认为是因为一个空格,所以这失败了
test09
,但是应该感谢,我将编辑它,使它在ruby中特别工作,它抱怨
^
$
字符。因此,我得到了一个失败的验证,我认为是因为一个空格,因此,这无法通过测试09,但应该感谢,我将对其进行编辑,使其在ruby中特别工作,ruby会抱怨
^
$
字符。这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论。-@U9前进,请解释为什么这个(正则表达式)不能回答这个问题。@U9前进,来吧,解释是显而易见的。您想让我说什么,“对于任何字符串
str
,测试该字符串是否符合测试要求的是
str.match?/\A[\p{Alnum}]+]+/
”?然后我是否应该继续分解这个微不足道的正则表达式?告诉我这个问题的公认答案是否提供了更充分的解释。如果你看看我的其他答案,你会发现我经常提供血淋淋的细节。这里不需要,这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论。-@U9前进,请解释为什么这个(正则表达式)不能回答这个问题。@U9前进,来吧,解释是显而易见的。您想让我说什么,“对于任何字符串
str
,测试该字符串是否符合测试要求的是
str.match?/\A[\p{Alnum}]+]+/
”?然后我是否应该继续分解这个微不足道的正则表达式?告诉我这个问题的公认答案是否提供了更充分的解释。如果你看看我的其他答案,你会发现我经常提供血淋淋的细节。这里不需要它。