首页 > 解决方案 > 如何检查给定的用户名是否至少有一个红宝石字母

问题描述

我有这个正则表达式:

^(?=.*[a-zA-Z])(?=.*[0-9])

但这需要字母和数字。我需要检查用户名是否充满字母pratha或带有数字的字母pratha123123pratha但不仅仅是数字1234156

我无法调整这个正则表达式来满足我的需要。我怎样才能适应这样的工作?

请注意,没有顺序应该以字母开头。它可以以数字或字母开头,但至少应包含一个字母。我只想丢弃数字。而用户名只是a-zA-Z0-9. 所以没有Unicode字符。

使用红宝石2.6.3

演示https ://rubular.com/r/WT9VCAphYyEMIc

更新:我发现这种模式也允许空格。它不应该。

标签: regexruby

解决方案


据我了解,您想确定字符串是否只有字母和数字以及至少一个字母。您可以使用以下正则表达式:

r = /\A\p{Alnum}*\p{L}\p{Alnum}*\z/

其内容为“匹配字符串开头的锚点,后跟零个或多个字母数字 (Unicode) 字符(字母或数字),后跟一个字母,后跟零个或多个字母数字字符,然后是字符串结尾锚”。

"12abc34".match?(r) #=> true
"1234567".match?(r) #=> false
"=12abc3".match?(r) #=> false
"".match?(r)        #=> false

另一种方式:

r = /\A(?=.*\p{L})\p{Alnum}*\z/

其内容为:“匹配字符串开头的锚点,后跟一个前面有零个或多个字符的字母,在正向前瞻中(不消耗任何字符),后跟零个或多个字母数字字符,后跟一个结束-弦锚”。


推荐阅读