Что такое ^. * И. * $В регулярных выражениях?
Может кто-нибудь объяснить смысл этих символов. Я искал их, но, похоже, я не понимаю.
Все регулярное выражение:
/^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$/
В основном это начало регулярного выражения и конечных символов.
Ответы
Ответ 1
^.* //Start of string followed by zero or more of any character (except line break)
.*$ //Zero or more of any character (except line break) followed by end of string
Итак, когда вы видите это...
(?=.*[@#$%^&+=]).*$
Это позволяет любому символу (кроме разрыва строки) находиться между (?=.*[@#$%^&+=])
и концом строки.
Чтобы показать, что .
не соответствует ни одному символу, попробуйте следующее:
/./.test('\n'); is false
Чтобы соответствовать любому персонажу, вам нужно что-то более похожее на [\s\S]
.
/[\s\S]/.test('\n') is true
Ответ 2
-
.
означает "любой символ".
-
*
означает "любое количество этого".
-
.*
поэтому означает произвольную строку произвольной длины.
-
^
указывает начало строки.
-
$
указывает конец строки.
Регулярное выражение говорит: может быть любое количество символов между выражением (?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])
и началом и концом искомой строки.
Ответ 3
Основные документы: http://www.php.net/manual/en/reference.pcre.pattern.syntax.php
/^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$/
12345 6 7 89
1 - start of pattern, can be almost any character, and must have a matching character at the END of the pattern (see #9 below)
2 - anchors the pattern to the start of a line of text
3 - `.` matches any character
4 - a modifier, "0 or more of whatever came before"
- `.*` means "0 or more of ANY characters"
5 - A positive lookahead assertion: http://www.php.net/manual/en/regexp.reference.assertions.php
6 - A repetition indictor: http://www.php.net/manual/en/regexp.reference.repetition.php
- `{8,}` = "at least 8 of whatever came previously"
- `.{8,}` = "at least 8 'any' characters"
7 - A character class: http://www.php.net/manual/en/regexp.reference.character-classes.php
- `[a-z]` - any one character in the range 'a' - 'z' (the lower case alphabet)
8 - anchors the pattern to the end of the line
9 - end of the pattern, must match character used in #1 above.
Ответ 4
Это соответствует началу строки (^), за которой следует любой символ (. *):
^.*
Это соответствует концу строки ($), которому предшествует любой символ (. *):
.*$
Ответ 5
^
соответствует началу строки
$
соответствует концу
. *
- любое количество символов
Ответ 6
Что-то еще, что я вам помогу в будущем:
.*$
будет соответствовать два раза с учетом этой строки: "1"
Если вам интересно, почему, это потому, что он потребляет все символы, но также ничего не соответствует. Таким образом, пустая строка также является совпадением.
Ответ 7
Это похоже на типичное регулярное выражение для проверки пароля, за исключением того, что у него есть пара ошибок. Во-первых, .*
в начале не принадлежит. Если какой-либо из этих представлений не удастся в начале строки, нет смысла применять их снова в следующей позиции, или следующей и т.д.
Во-вторых, в то время как регулярное выражение гарантирует, что каждый из этих трех видов символов присутствует, он ничего не говорит о остальной части строки. Возможно, это был преднамеренный выбор, но люди обычно стараются застраховать только те виды персонажей. В этом случае вы хотели бы изменить первый взгляд от (?=.{8,})
до (?=[[email protected]#$%^&+=]{8,}$)
.
Конечный результат:
/^(?=[[email protected]#$%^&+=]{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$/