これはいかがですか?
^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[^\w])(?!.*?\s).{8,15}$
私はすべてのあなたの肯定先読みに加えて、空白のための否定先読みを追加しました。
基本的には、「選択したものに続いて一致するものを作成する」という意味の「先読み」が基本的にあります。冒頭に
(?=.*?[A-Z]) // followed by any number of characters and then a capital letter
(?=.*?[a-z]) // followed by any number of characters and then a lowercase letter
(?=.*?[0-9]) // followed by any number of characters and then a number
(?=.*?[^\w]) // followed by any number of characters and then not a word character (0-9a-zA-Z_)
^
で始まることを意味:それは、4つの異なる先読みを持っています。したがって、基本的に正規表現の開始には上記の4つの条件すべてが続くべきだと言います。私はちょうどスペースが続くことができないと言う条件をもう1つ追加しました。 「否定先読み」と呼ばれる:
(?!.*?\s)
(?=。*?[a-z])について説明するリンクはありますか? +1のために。ありがとう – Pankaj
はい、私が見つけた最良の参考資料はMDNです。 これはjavascriptですが、jsとphpの正規表現は私の経験ではほぼ同じです。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp。また詳細な内訳 https://regex101.com/r/nKgk6R/1 – user3413723