Angular 6反应形式密码验证正则表达式模式和确认验证

时间:2018-08-02 05:24:22

标签: angular angular6 angular-reactive-forms angular-validation angular-validator

我正在尝试使用Angular 6反应性表单构建注册表单。

 ngOnInit() {
this.registerForm = this.formBuilder.group({
  firstName: ['', [Validators.required],
  lastName: ['', [Validators.required]],
  email: ['', [Validators.required, Validators.email]],
  password: ['', [Validators.required, Validators.pattern('^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&].{8,}$')]],
  confirmPassword: ['', [Validators.required, Validators.pattern('^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&].{8,}$')]]
});

}

如何进行验证,以便允许:

  • 数字
  • 资本
  • 小写字母
  • 任何特殊字符
  • 最少8个字符

我正在使用的此正则表达式可以正常工作,但是我不能使用任何其他特殊字符,例如,我尝试Demoo123#却没有工作。但是Demoo123@工作正常。我认为我的正则表达式特殊字符部分存在问题。我是否必须手动提及所有允许的特殊字符?还是为此提供某种捷径?我在某处读到正则表达式不喜欢主题标签# ...是真的吗?

另一个问题是如何进行确认确认,以使ConfirmPassword值必须与密码字段值相同?

3 个答案:

答案 0 :(得分:1)

问题是我没有将pattern属性添加到密码字段。 public class SmartActivity extends Activity implements AdvancedWebView.Listener { private AdvancedWebView mWebView; private FirebaseAuth mAuth; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_smart); mAuth = FirebaseAuth.getInstance(); mWebView = (AdvancedWebView) findViewById(R.id.webview); mWebView.loadUrl("file:///android_asset/home.html"); mWebView.getSettings().setJavaScriptEnabled(true); getUserProfile(); } public void getUserProfile() { FirebaseUser user = mAuth.getCurrentUser(); String userID = user.getUid(); if (user != null) { DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Users"); ref.child(userID).addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { String username = dataSnapshot.child("name").getValue().toString(); String email = user.getEmail(); mWebView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView web, String url) { String text1 = "UserName"; String text2 = username; web.loadUrl("javascript:(function(){document.body.innerHTML = document.body.innerHTML.replace('" + text1 + "', '" + text2 + "')})()"); } }); } @Override public void onCancelled(DatabaseError firebaseError) { } }); } } }

那是相当有线的。为什么在代码中指定输入时需要在输入上指定它?没办法,但是可行。

答案 1 :(得分:0)

formGroup 中的 TypeScript 验证

password: ['', [
   Validators.required, 
   Validators.pattern("^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&].{8,}$")
]],
<块引用>

message: 密码必须包含 8 个以上的字符,1 个数字,1 个 大写字母和 1 个特殊字符 ($@$!%*?&).

答案 2 :(得分:0)

将 RegEx 作为参数传递对我有用:

Validators.pattern(new RegExp("^(?=.*[A-Z])(?=.*[!@#\$%\^&\*])(?=.{9,}))")

或者我们可以在模式的两端使用正斜杠:

/your_pattern_here/

例如:

Validators.pattern(/^(?=.*[A-Z])(?=.*[!@#\$%\^&\*])(?=.{9,}))/)