42

I'm a newbie to RegEx, and this particular issue is flummoxing me. This is for use with a JavaScript function.

I need to validate an input so that it matches only these criteria:

  • Letters A-Z (upper and lowercase)
  • Numbers 0-9
  • The following additional characters: space, period (.), comma (,), plus (+), and dash (-)

I can write a pattern easily enough for the first two criteria, but the third one is more difficult. This is the last pattern I managed, but it doesn't seem to work with the test string Farh%%$$+++,

Here's the pattern I'm trying

[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\\+\\.\\,\\s]*$ 

It's failing in that it's letting characters other than those specified in the text field when submitting the form.

Any help would be greatly appreciated.

0

5 Answers 5

67

I just tested this out, and it seems to work at least from my first round testing.

^[a-zA-Z 0-9\.\,\+\-]*$
6
  • 2
    except that it matches an empty string (and tab charatecter) and you don't need to escape any of those characters Commented Oct 12, 2009 at 17:26
  • @SlientGhost Good point on the empty string, but technically anything that allows a space, and using a single character class will allow all spaces. As for the escaping, I was just being careful, I was running this through a .NET RegEx tester and seeing funny results. Commented Oct 12, 2009 at 18:16
  • I think this might do it. Had to add 0-9 to make it match numbers.
    – RHPT
    Commented Oct 12, 2009 at 18:29
  • you see, it's not just tabs, in Javascript \s matches spaces, tabs, line breaks plus any Unicode whitespace characters, which, it seems to me, is slightly more than what OP wanted. Commented Oct 12, 2009 at 18:31
  • Ah yes, forgot the 0-9, and removed the \s Commented Oct 12, 2009 at 19:15
17

The dash needs to be first in order not to be interpreted as a range separator. Also, make sure you anchor your regex with a ^ and $ at the beginning and end respectively so that your entire test string gets swallowed by your regex.

/^[-+., A-Za-z0-9]+$/
1
  • 3
    The dash can also appear at the end or between character ranges in order not to be interpreted as a range separator: [a-z0-9-] and [a-z-0-9] are valid expressions too.
    – Gumbo
    Commented Oct 12, 2009 at 19:26
4
/^[a-z0-9 .,+-]+$/i
2

For validate selector as ID only (according to allowed characters https://www.w3.org/TR/html4/types.html#type-id):

var isValidIdSelector = function (str) {
    var regex = new RegExp(/^[A-Za-z][A-Za-z0-9_\-\:\.]*$/gm);
    return regex.test(str);
};
-4
ng-pattern="/^[a-zA-Z0-9/&quot&quot\\\]\[:;|=,+*?<>]+$/"

allows: alphanumeric + " / \ [ ] : ; | = , + * ? <>

Not the answer you're looking for? Browse other questions tagged or ask your own question.