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

AngularJS - Build a custom validation directive for using multiple emails in textarea

AngularJS already supports the built-in validation with text input with type email. Something simple likes the following:
<input name="input" ng-model="email.text" required="" type="email" /> <span class="error" ng-show="myForm.input.$error.email"> Not valid email!</span>
However, I used a text area and I wanted to enter some email addresses that's saparated by a comma (,). I had a short research and it looked like AngualarJS has not supported this functionality so far. Therefore, I needed to build a custom directive that I could add my own validation functions. My validation was done only on client side, so I used the $validators object.

Note that, there is the $asyncValidators object which handles asynchronous validation, such as making an $http request to the backend.

This is just my implementation on my project. In order to understand that, I supposed you already had experiences with Angular…

The HelloWorld example of JSF 2.2 with Myfaces

I just did by myself create a very simple app "HelloWorld" of JSF 2.2 with a concrete implementation Myfaces that we can use it later on for our further JSF trying out. I attached the source code link at the end part. Just follow these steps below:

1. Create a Maven project in Eclipse (Kepler) with a simple Java web application archetype "maven-archetype-webapp". Maven should be the best choice for managing the dependencies, so far. JSF is a web framework that is the reason why I chose the mentioned archetype for my example.

2. Import dependencies for JSF implementation - Myfaces (v2.2.10) into file pom.xml. The following code that is easy to find from http://mvnrepository.com/ with key words "myfaces".

<dependency> <groupId>org.apache.myfaces.core</groupId> <artifactId>myfaces-api</artifactId> <version>2.2.10</version> </dependency> <dependency> <groupId>org.apache.myfaces.core</groupId&g…

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 type="te…

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: absolut…

Attribute 'for' of label component with id xxxx is not defined

I got the warning in the log file when I have used the tag <h:outputLabel> without attribute "for" in xhtml file. It was really polluting my server log files.

The logged information actually makes sense anyway! We could find an answer as the following:

"Having h:outputLabel without a "for" attribute is meaningless. If you are not attaching the label, you should be using h:outputText instead of h:outputLabel."

However, these solutions are not possible just for my situation. Instead of using h:outputText for only displaying text, my team has used h:outputLabel too many places. We were nearly in our release time (next day) so it is quite risky and takes much efforts if we try to correct it. Because the style (with CSS) is already done with h:ouputLabel. The alternative by adding attribute "for" the existing h:outputLabel is not reasonable either. I really need to find another solution.
Fortunately, I came across a way if I change to use p:out…