буквенно-цифровой, не менее 1 символа - PullRequest
0 голосов
/ 21 декабря 2009

Хорошо, так что я наконец понял, что мне нужно следующее:

Итак, регулярное выражение должно выполнить:

  1. буквенно-цифровой
  2. минимум 1 буква
  3. должен содержать от 4 до 8 символов (либо буква / цифра).

т.е. буквенно-цифровая строка, которая должна содержать не менее 1 буквы и иметь длину от 4 до 8. (поэтому это не может быть только все цифры или только все буквы).

Можно ли все это сделать в одном регулярном выражении?

Ответы [ 5 ]

11 голосов
/ 21 декабря 2009

Я предполагаю, что вы имеете в виду буквенно-цифровую, по крайней мере одну букву и длину от 4 до 8 символов.

Попробуйте это:

(?=.*[a-zA-Z])[a-zA-Z0-9]{4,8}
  • (?= - мы используем lookahead , поэтому мы можем что-то проверить, не влияя на остальную часть матча

  • .*[a-zA-Z] - соответствует чему-либо, за которым следует буква, т.е. проверьте, что у нас есть хотя бы одна буква

  • [a-zA-Z0-9]{4,8} - соответствует букве или цифре от 4 до 8 раз.

Однако вы говорите, что намерение заключается в том, что «это не могут быть только все цифры или только все буквы», но требования 1, 2 и 3 не достигают этого, поскольку это могут быть все буквы и отвечать всем трем требованиям. Возможно, вы захотите это, с дополнительным вниманием, чтобы подтвердить, что есть хотя бы одна цифра:

(?=.*[a-zA-Z])(?=.*[0-9])[a-zA-Z0-9]{4,8}

Использование a-zA-Z не очень удобно для международного сообщества, поэтому вам лучше использовать escape-код для "письма", если он доступен в вашем аромате регулярных выражений.

Кроме того, я надеюсь, что это не подходит для приемлемых паролей, поскольку 4 символа, вероятно, недостаточно длинны.

1 голос
/ 21 декабря 2009
?Regex.IsMatch("sdf", "(?=.+[a-zA-Z])[a-zA-Z0-9]{4,8}")
false
?Regex.IsMatch("sdfd", "(?=.+[a-zA-Z])[a-zA-Z0-9]{4,8}")
true
?Regex.IsMatch("1234", "(?=.+[a-zA-Z])[a-zA-Z0-9]{4,8}")
false

Предупреждение о **. * и . + :

// At least one letter does not match with .*
?Regex.IsMatch("1111", "(?=.*[a-zA-Z])[a-zA-Z0-9]{4,8}")
false

?Regex.IsMatch("1aaa", "(?=.+[a-zA-Z])[a-zA-Z0-9]{4,8}")
true
1 голос
/ 21 декабря 2009

№ 2 и 3, кажется, противоречат. Следующее будет соответствовать буквенно-цифровому от 4 до 8:

/[0-9a-zA-Z]{4,8}/
0 голосов
/ 21 декабря 2009

Попробуйте: [a-zA-Z0-9] {4,8}

0 голосов
/ 21 декабря 2009
[a-zA-Z0-9]{4,8}

В первой части указываются буквенно-цифровые символы, а во второй - от 4 до 8 символов.

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