Я пытаюсь проверить строку с похожим шаблоном, который состоит только из следующих символов, и я приближаюсь к нему, но все еще могу обойти мое выражение curernt:
valid characters: numbers 0-9, alphanumeric chars + . = \
выражение:
'%[^[0-9A-Za-z+.\_\-\=\\\]]%' ESCAPE '\'
Но с этим выражением строки в квадратных скобках и символы "-" также считаются правильными. Если я поменяю внутренние скобки на нормальные скобки, вот так
'%[^(0-9A-Za-z+.\_\-\=\\\)]%' ESCAPE '\'
У меня все та же проблема, но на этот раз с нормальными скобками.
Тестовые данные, с которыми я играю:
IF OBJECT_ID('TEMPDB..#temp') IS NOT NULL DROP TABLE #temp
CREATE TABLE #temp(
string varchar(max),
expectedResult varchar(max),
result varchar(max)
)
insert #temp(string,expectedResult)
values
('da)ssdas', 'invalid'),
('DFGHJ§$%', 'invalid'),
('+=8rt8\\//12=+', 'invalid'),
('[BIGBEAR]', 'invalid'),
('BIG-BEAR', 'invalid'),
('x[BIGBEAR]x', 'invalid'),
('(BIGBEAR)', 'invalid'),
('+=8rt8Ahd12=+', 'valid')
update #temp
set result = CASE WHEN string like '%[^[0-9A-Za-z+.\_\-\=\\\]]%' ESCAPE '\'
THEN 'invalid'
ELSE'valid'
END
select * from #temp
результат
string expectedResult result
da)ssdas invalid invalid
DFGHJ§$% invalid invalid
+=8rt8\\//12=+ invalid invalid
[BIGBEAR] invalid valid
BIG-BEAR invalid valid
x[BIGBEAR]x invalid valid
(BIGBEAR) invalid invalid
+=8rt8Ahd12=+ valid valid