Regex Ruby混乱



我目前正在构建一个任意的ruby程序,但我的名字验证通过ruby(尚未使用rails)来验证始终不工作,因为当我输入纯数字时,它运行良好,当它不应该。

def user_input
puts 'What is your name?'
user_name = gets.chomp
name_pattern = Regexp.new('/A[^0-9`!@#$%^&*+_=]+z/')
while user_name =~ name_pattern
puts 'please enter a real name'
user_name = gets.chomp
end
user_name
end
def main
user_name = user_input
puts "n"
puts user_name.to_s
end

此外,我还尝试了regex/[a-z]+/只是为了检查它是否是我的regex,它似乎不是那么好,因为当我用regex/[a-z]+/输入33时,它也工作得很好?我哪里做错了,哈哈。

问题是你的regex在开头和结尾包含一个正斜杠。

下面的代码为"一个或多个小写字母"定义了一个正则表达式:

name_pattern = /[a-z]+/
# OR
name_pattern = Regex.new('[a-z]+')

这段代码定义了一个正则表达式,整个字符串只能由一个或多个小写字符组成:

name_pattern = /A[a-z]+z/
# OR
name_pattern = Regex.new('A[a-z]+z')

这段代码为&quot定义了一个正则表达式;整个字符串只能由不是的字符组成数字,非特定符号";

name_pattern = /A[^0-9`!@#$%^&*+_=]z/
# OR
name_pattern = Regex.new('A[^0-9`!@#$%^&*+_=]z')

你的代码混淆了这两种语法,通过在regex的开始和结束添加文字斜杠。

您需要在字符串(A)开始之前使用/,因此您的/A[^0-9`!@#$%^&*+_=]+z/模式是一个从不匹配任何字符串的模式。

使用

name_pattern = /A[^0-9`!@#$%^&*+_=]+z/

或者,如果您喜欢Regexp.new符号,

name_pattern = Regexp.new('A[^0-9`!@#$%^&*+_=]+z')

同样,字符类中的$不需要转义,[$]总是匹配$字符。

字符类中的^字符只有当它是该类中的第一个字符时才需要转义。这里,它不是第一个,所以不需要转义。

相关内容

  • 没有找到相关文章

最新更新