誰かが正規表現で私を助けて、少なくとも1つの特殊文字、1つの大文字、1つの小文字を許可できますか?
これは私がこれまでに持っているものです:
^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$
ただし、「特殊文字」、「大文字」、「小文字」の順序でのみ文字と一致するようです。
どんな助けでも大歓迎です
誰かが正規表現で私を助けて、少なくとも1つの特殊文字、1つの大文字、1つの小文字を許可できますか?
これは私がこれまでに持っているものです:
^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$
ただし、「特殊文字」、「大文字」、「小文字」の順序でのみ文字と一致するようです。
どんな助けでも大歓迎です
あなたの正規表現
^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$
実際には問題なく動作するはずですが、最初の.*
:を削除することでさらに改善できます。
^(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$
@#$%^&+=
少なくとも1つの小文字と1つの大文字のASCII文字、およびセットからの少なくとも1つの文字(任意の順序)を含む、少なくとも8文字の任意の文字列に一致します。
使用できる関数は次のとおりです。
function checkRegex(string) {
var checkSpecial = /[*@!#%&()^~{}]+/.test(string),
checkUpper = /[A-Z]+/.test(string),
checkLower = /[a-z]+/.test(string),
r = false;
if (checkUpper && checkLower && checkSpecial) {
r = true;
}
return r;
}
次に、それが真か偽かを確認します。
var thisVal = document.getElementById('password').value;
var regex = checkRegex(thisVal);
の場合、条件var regex
はtrue
満たされます。
3つの正規表現ですばやく実行できます。
function check($string){
return preg_match("/[`!%$&^*()]+/", $string)
&& preg_match("/[a-z]+/", $string)
&& preg_match("/[A-Z]+/", $string) ;
}
特殊文字のリストを微調整することを忘れないでください。あなたが特別だと思うキャラクターがわからないからです。
専門家ではないのに単一行の正規表現で多くの時間を無駄にしても、生産性は向上しないと思います。この3つの正規表現ソリューションは問題なく機能します。それは時間を節約します。
下の画像のような出力が必要な場合:
以下の動的カスタムコンポーネントを使用できます。
import { Component, Input, OnInit, EventEmitter, Output, OnChanges } from '@angular/core';
import { RegExpValidator } from '../../classes/reg-exp-validator';
@Component({
selector: 'app-reg-exp-validator',
template: `
<div *ngFor="let regExp of regExps" style='text-align: left'>
<div>
<i *ngIf="!regExp.isOptional" [ngStyle]="{'color': isValidExp(regExp) ? 'green' : 'red'}"
[className]="isValidExp(regExp)? 'pi pi-check-circle' : 'pi pi-times-circle'">
</i>
<i *ngIf="regExp.isOptional" [ngStyle]="{'color': isValidExp(regExp) ? 'green' : 'orange'}"
[className]="isValidExp(regExp)? 'pi pi-check-circle' : 'pi pi-times-circle'">
</i>
{{regExp.message}}
</div>
</div> `
})
export class RegExpValidatorComponent implements OnInit, OnChanges {
@Input() value: string;
@Input() regExps: Array<RegExpValidator>;
@Output() onChange: EventEmitter<boolean> = new EventEmitter();
constructor() { }
ngOnChanges(): void {
this.validateExpressions();
}
ngOnInit() {
}
isValidExp(regExp) {
if (regExp.isValid)
return regExp.isValid;
}
initiValue() {
this.value = this.value == undefined ? "" : this.value;
}
validateExpressions() {
this.initiValue();
let isInVlaidExpression = false;
this.regExps.forEach((regExp) => {
regExp.isValid = this.testRegExpression(regExp.regExpression);
if (!regExp.isValid && !regExp.isOptional) {
isInVlaidExpression = true;
}
});
this.onChange.emit(isInVlaidExpression);
}
testRegExpression(regExpression: RegExp) {
return regExpression.test(this.value);
}
}
どこ
正規表現
入力配列クラスは
export class RegExpValidator {
regExpression: RegExp;
message: string;
ordinal: number;
isValid: boolean = false;
isOptional: boolean; }
定義したら、以下の2つの手順に従って、ターゲットコンポーネントで使用できます。
1-正規表現自体の配列である最初の入力パラメーター、検証メッセージ、およびオプションかどうかを以下のように定義します。
DefineRegExpressions(){
let minPasswordLengthSixCharacters = new RegExpValidator();
minPasswordLengthSixCharacters.message = " The password should be at least 6 charcters";
minPasswordLengthSixCharacters.regExpression = /^.{6,}$/;
minPasswordLengthSixCharacters.isOptional = false;
let containsDigit = new RegExpValidator();
containsDigit.message = "The password should contains at least 1 digit";
containsDigit.regExpression = /\d/;
containsDigit.isOptional = false;
let containsLowerCharacter = new RegExpValidator();
containsLowerCharacter.message = "The password should contains at least 1 lower charcter";
containsLowerCharacter.regExpression = /.*[a-z].*/;
containsLowerCharacter.isOptional = false;
let containsUpperCharacter = new RegExpValidator();
containsUpperCharacter.message = "The password should contains at least 1 upper charcter";
containsUpperCharacter.regExpression = /.*[A-Z].*/;
containsUpperCharacter.isOptional = false;
let containsSymbol = new RegExpValidator();
containsSymbol.message = "The password contains at least 1 symbol @!#%&()^~{}";
containsSymbol.regExpression = /[*@!#%&()^~{}]+/;
containsSymbol.isOptional = true; }
次に、最初の入力を定義し、上記で定義されたすべての式の宣言をそれに追加します。
regExps = Array<RegExpValidator>();
this.regExps.push(minPasswordLengthSixCharacters);
this.regExps.push(containsDigit);
this.regExps.push(containsLowerCharacter);
this.regExps.push(containsUpperCharacter);
this.regExps.push(optional);
2-最後に、ターゲットコンポーネントのHTMLに次のコードを追加します。
<app-reg-exp-validator [value]="password"
[regExps]="regExps"
(onChange)="onChangeRegExpValidator($event)">
</app-reg-exp-validator>
値入力は、検証するターゲット入力を参照します。この場合、それはパスワードであり、onChangeは、すべての検証が有効かどうかを知るために使用できるカスタムコンポーネントから出力されます。
各カテゴリで許可される文字の数を選択できる、より一般的なパスワード/テキストの検証。
var regularExpression = new RegExp("^^(?=.*[A-Z]{"+minUpperCase+",})" +
"(?=.*[a-z]{"+minLowerCase+",})(?=.*[0-9]{"+minNumerics+",})" +
"(?=.*[!@#$\-_?.:{]{"+minSpecialChars+",})" +
"[a-zA-Z0-9!@#$\-_?.:{]{"+minLength+","+maxLength+"}$");
if (pswd.match(regularExpression)) {
//Success
}