我正在尝试使用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,}$')]]
});
}
如何进行验证,以便允许:
我正在使用的此正则表达式可以正常工作,但是我不能使用任何其他特殊字符,例如,我尝试Demoo123#
却没有工作。但是Demoo123@
工作正常。我认为我的正则表达式特殊字符部分存在问题。我是否必须手动提及所有允许的特殊字符?还是为此提供某种捷径?我在某处读到正则表达式不喜欢主题标签#
...是真的吗?
另一个问题是如何进行确认确认,以使ConfirmPassword值必须与密码字段值相同?
答案 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,}))/)