Skip to main content

Regex - Check a text without special characters but German, French

Special characters such as square brackets ([ ]) can cause an exception "java.util.regex.PatternSyntaxException" or something like this if we don't handle them correctly.

I had met this issue. In my case, my customers want our application should allow some characters in German and French even not allow some special characters.

The solution is that we limit the allowed characters by showing the validation message on GUI. For an instance, the message looks like the following:

"This field can't contain any special characters; only letters, numbers, underscores (_), spaces and single quotes (') are allowed."

I used Regular Expression to check it. For entering Germany and French, I actually don't have this type of keyboard, so I referred these sites:

* German characters: http://german.typeit.org/
* French characters: http://french.typeit.org/

Here is my code:
package vn.nvanhuong.practice;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class SpecialCharactersUtil {
 private SpecialCharactersUtil(){}
 
 public static boolean isExistNotAllowedCharacters(String source){
  Pattern regex = Pattern.compile("^[a-zA-Z_0-9_äöüÄÖÜùûüÿàâæéèêëïîôœÙÛÜŸÀÂÆÉÈÊËÏÎÔŒ' ]*$");
  Matcher matcher = regex.matcher(source);
  return !matcher.matches();
 }
}

And, some tests:
package vn.nvanhuong.practice.test;

import static org.junit.Assert.*;

import org.junit.Test;

import vn.nvanhuong.practice.SpecialCharactersUtil;

public class SpecialCharactersUtilTest {

 @Test
 public void shoulDetectSpecialCharacters() {
  String source = "~`!@#$%^&*()-+={}\\[\\]\\|:;\"<>,./?";
  assertTrue(SpecialCharactersUtil.isExistNotAllowedCharacters(source));
 }
 
 @Test
 public void shoulAllowGermanCharacters() {
  String source = "äöüÄÖÜ";
  assertFalse(SpecialCharactersUtil.isExistNotAllowedCharacters(source));
 }
 
 @Test
 public void shoulAllowFrenchCharacters() {
  String source = "ùûüÿàâæéèêëïîôœÙÛÜŸÀÂÆÉÈÊËÏÎÔŒ";
  assertFalse(SpecialCharactersUtil.isExistNotAllowedCharacters(source));
 }

 @Test
 public void shoulAllowAlphanumericAndSpacesAndUnderscoreAndSingleQuote() {
  String source = "character' special_1";
  assertFalse(SpecialCharactersUtil.isExistNotAllowedCharacters(source));
 }
}
Now, we can use the method for our validation on GUI.

Comments

Popular posts from this blog

Styling Sort Icons Using Font Awesome for Primefaces' Data Table

So far, Primefaces has used image sprites for displaying the sort icons. This leads to a problem if we want to make a different style for these icons; for example, I would make the icon "arrow up" more blurry at the first time the table loading because I want to highlight the icon "arrow down". I found a way that I can replace these icons with Font Awesome icons. We will use "CSS Pseudo-classes" to achieve it. The hardest thing here is that we should handle displaying icons in different cases. There is a case both "arrow up" and "arrow down" showing and other case is only one of these icons is shown. .ui-sortable-column-icon.ui-icon.ui-icon-carat-2-n-s { background-image: none; margin-left: 5px; font-size: 1.1666em; position: relative; } .ui-sortable-column-icon.ui-icon.ui-icon-carat-2-n-s:not(.ui-icon-triangle-1-s)::before { content: "\f106"; font-family: "FontAwesome"; position: ...

Selenium - Override javascript functions to ignore downloading process

I have got an issue with downloading process on IE 8. This browser blocks my automatic-download functionality on my app so that I could not work with my test case any more after that. In my case, I didn't care about the file is downloaded or not, I just focus on the result after downloading process finished successfully. Therefore, I found a solution to ignore this process so that I can work normally. I use Primefaces, here is the remote command to trigger the download process <p:remoteCommand name="cmdGenerateDocument" actionListener="#{logic.onGenerateDocument}" update="xrflDocumentCreationPanel" oncomplete="clickDownloadButton();"/> The following is my test case: @Test public void shouldUpdateStep6ToWarningIfStep1IsValidAfterFinished(){ MainPage mainPage = new MainPage(); waitForLoading(mainPage.getDriver()); EmployeeDetailPage empDetailPage = new EmployeeDetailPage(); waitForLoading(empDetailPage.getDriver()); e...

Only allow input number value with autoNumeric.js

autoNumeric is a jQuery plugin that automatically formats currency and numbers as you type on form inputs. I used autoNumeric 1.9.21 for demo code. 1. Dowload autoNumeric.js file from  https://github.com/BobKnothe/autoNumeric 2. Import to project <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <script type="text/javascript" src="js/autoNumeric.js"></script> 3. Define a function to use it <script type="text/javascript"> /* only number is accepted */ function txtNumberOnly_Mask() { var inputOrgNumber = $("#numberTxt"); inputOrgNumber.each(function() { $(this).autoNumeric({ aSep : '', aDec: '.', vMin : '0.00' }); }); } </script> 4. Call the function by event <form> <input type="text" value="" id="numberTxt"/>(only number) </form> <script ty...

DevOps for Dummies

Everyone talks about it, but not everyone knows what it is. Why DevOps? In general, whenever an organization adopts any new technology, methodology, or approach, that adoption has to be driven by a business need. Any kind of system that need rapid delivery of innovation requires DevOps (development and operations). Why? DevOps requires mechanisms to get fast feedback from all the stakeholders in the software application that's being delivered. DevOps approaches to reduce waste and rework and to shift resources to higher-value activities. DevOps aims to deliver value (of organization or project) faster and more efficiently. DevOps Capabilities The capabilities that make up DevOps are a broad set that span the software delivery life cycle. The following picture is a reference architecture which provides a template of a proven solution by using a set of preferred methods and capabilities. My Remarks Okay, that sounds cool. What does it simply mean, again? The f...

My must-have apps for daily work

There is no doubt that cool apps can help us be more productive and enjoyable at work. For the time being, I really love the following apps which are used by me almost every day. 1. A personal Kanban In fact, a personal kanban is the most useful app for me. Why does it matter? It is not just a to-do list, but it keeps me motivated every day because it helps me be able to know what my "big picture" is. I usually set up my plans together with a path to reach them.  KanbanFlow  is my preferred tool. KanbanFlow 2. A terminal Needless to say, a terminal is a must-have app for every developer, especially the ones use macOS/Linux. Due to its importance, I love to decorate and enhance it to be super exciting with various tools such as  iTerm ,  oh-my- zsh , and  thefuck . ;) iTerm + oh-my-zsh 3. A documentation "ecosystem" As a developer, I can not remember all things that I have experimented a day. Moreover, a document is really useful for sharing an...