Использование Regex для сопоставления ввода, содержащего только сочетание буквенно-цифровых и специальных символов (без пробелов) - PullRequest
0 голосов
/ 21 марта 2019

Я хочу сопоставить входную строку, содержащую только сочетание буквенно-цифровых и специальных символов (без пробелов).

Например:

входные данные:

1) fdg56`)(12@$5hjfgh436757))((((321\]
2) dfdgfhfghb
3) 46567657
4) df
5) &%%@erer* #@*(tyhjd4
6) sadsf5ds7f78sf
7) #29 street
8) &%%@fdgdg*#@*(dsfdsg

ДляВ указанных выше восьми входах регулярное выражение должно соответствовать только 1 и 8. Это не должно соответствовать входному номеру 5, так как он имеет пробел.Регулярное выражение, которое я написал, находит совпадения 1,8 и 5.

регулярное выражение:

(?=[\!\$\%\^\&\*\(\)\.\?\"\:\{\}\|\<\>\\\/]+).*

ссылка:

https://regex101.com/r/0ZUuda/10

Как проверить и избежать совпадения ввода, содержащего пробел в этом регулярном выражении, или есть ли другой способ добиться этого?

1 Ответ

1 голос
/ 21 марта 2019

Во-первых, начинайте с начала строки:

^

В поисках специального символа где-то в строке:

(?=.*[`!@#$%^&*().?":{}|<>\\/])

Поскольку вы считаете обратный удар и #в качестве специального символа, убедитесь, что включили их в набор символов.(Большинство символов не нужно экранировать в наборе символов)

Также ищите буквенно-цифровые символы где-то в строке:

(?=.*[a-z0-9])

Затем сопоставляйте специальные символы и буквенно-цифровые символы, покавы доберетесь до конца строки:

[`!@#$%^&*().?":{}|<>\\/\]a-z0-9]+$

Соедините все вместе, и вы получите:

(?i)^(?=.*[`!@#$%^&*().?":{}|<>\\/\]])(?=.*[a-z0-9])[`!@#$%^&*().?":{}|<>\\/\]a-z0-9]+$

https://regex101.com/r/0ZUuda/11

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...