Regex абсолютный новичок: фильтр буквенно-цифровой - PullRequest
1 голос
/ 26 июня 2019

Я играю CodeWars в Ruby, и я застрял на Ката. Цель состоит в том, чтобы проверить, является ли строка ввода пользователя буквенно-цифровой. (да, это довольно продвинутый Regex)

Инструкция:

At least one character ("" is not valid)
Allowed characters are uppercase / lowercase latin letters and digits from 0 to 9
No whitespaces/underscore

Что я пробовал:

^[a-zA-Z0-9]+$
^(?! !)[a-zA-Z0-9]+$
^((?! !)[a-zA-Z0-9]+)$

Он проходит все тесты, кроме одного, вот сообщение об ошибке:

Value is not what was expected

Я думаю, что Regex, который я использую, удовлетворит все условия, чего мне не хватает?


РЕШЕНИЕ: \A[a-zA-Z0-9]+\z (и лучше Ruby: ^))
  • $ => конец строки
  • \z => конец строки

(то же самое для начала: ^ (строка) и \A (строка), но не нужно для теста)

Любимый ответ другого игрока:

/\A[A-z\d]+\z/

1 Ответ

0 голосов
/ 26 июня 2019

Я предполагаю, что, возможно, мы начнем с выражения, похожего на:

^(?=[A-Za-z0-9])[A-Za-z0-9]+$

, и проверим, может ли оно охватить наши желаемые правила.

В этой демонстрации , если вам это интересно, объясняется выражение.

Test

re = /^(?=[A-Za-z0-9])[A-Za-z0-9]+$/m
str = ' 
ab
c
def
abc*
def^
'

# Print the match result
str.scan(re) do |match|
    puts match.to_s
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...