about summary refs log tree commit diff
path: root/usth/ICT2.2/labwork/3/C++/name-card.cc
diff options
context:
space:
mode:
Diffstat (limited to 'usth/ICT2.2/labwork/3/C++/name-card.cc')
-rw-r--r--usth/ICT2.2/labwork/3/C++/name-card.cc47
1 files changed, 47 insertions, 0 deletions
diff --git a/usth/ICT2.2/labwork/3/C++/name-card.cc b/usth/ICT2.2/labwork/3/C++/name-card.cc
new file mode 100644
index 0000000..b6c0751
--- /dev/null
+++ b/usth/ICT2.2/labwork/3/C++/name-card.cc
@@ -0,0 +1,47 @@
+#include <regex>
+#include <stdexcept>
+#include <string>
+
+#include "name-card.h"
+
+using namespace std;
+
+const regex name_pattern ("[ A-Za-z]+");
+const regex phone_pattern ("[-0-9]+");
+// This should be good enough I guess?
+const regex email_pattern ("(\\w+)(\\.|_)?(\\w*)@(\\w+)(\\.(\\w+))+");
+
+void
+NameCard::set_name (string s)
+{
+  // I miss Raku so much
+  smatch m;
+  if (!regex_match (s, m, name_pattern))
+    throw invalid_argument{"invalid name"};
+  name = s;
+}
+
+void
+NameCard::set_phone (string s)
+{
+  smatch m;
+  if (!regex_match (s, m, phone_pattern))
+    throw invalid_argument{"invalid number"};
+  phone = s;
+}
+
+void
+NameCard::set_email (string s)
+{
+  smatch m;
+  if (!regex_match (s, m, email_pattern))
+    throw invalid_argument{"invalid name"};
+  email = s;
+}
+
+NameCard::NameCard (string n, string p, string e)
+{
+  set_name (n);
+  set_phone (p);
+  set_email (e);
+}