admin管理员组

文章数量:1317898

I'm having a bit of trouble validating a form I have, I can check for only letters, numbers and a full stop ("period") in a single text input, but I can't for the life of me get it to work at all on a textarea field.

in my validation I have this:

var usernamecheck = /^[A-Za-z0-9.]{5,1000}$/; 

the validation I've tried that doesn't work on the textarea ($ITSWUsers) is:

if(!document.all.ITSWUsers.value.match(usernamecheck))
                {
                alert ("Please write the usernames in the correct format (with a full stop between first and last name).");
                return false;
                }

however, the following on a 'input type="text"' works just fine on the same form

if(!document.all.SFUsersName1.value.match(usernamecheck))
                {
                alert("Usernames can only contain letters, numbers and full stops (no spaces).");  
                return false;  
                }  

I need it to validate usernames, 1 name per line e.g.

John.smith
Peter.jones1

these are both OK but the following wouldn't be:

John Smith
David.O'Leary
3rd.username

any help/pointers with this would be greatly appreciated (I only know basic html/php/javascript)

I'm having a bit of trouble validating a form I have, I can check for only letters, numbers and a full stop ("period") in a single text input, but I can't for the life of me get it to work at all on a textarea field.

in my validation I have this:

var usernamecheck = /^[A-Za-z0-9.]{5,1000}$/; 

the validation I've tried that doesn't work on the textarea ($ITSWUsers) is:

if(!document.all.ITSWUsers.value.match(usernamecheck))
                {
                alert ("Please write the usernames in the correct format (with a full stop between first and last name).");
                return false;
                }

however, the following on a 'input type="text"' works just fine on the same form

if(!document.all.SFUsersName1.value.match(usernamecheck))
                {
                alert("Usernames can only contain letters, numbers and full stops (no spaces).");  
                return false;  
                }  

I need it to validate usernames, 1 name per line e.g.

John.smith
Peter.jones1

these are both OK but the following wouldn't be:

John Smith
David.O'Leary
3rd.username

any help/pointers with this would be greatly appreciated (I only know basic html/php/javascript)

Share Improve this question edited May 9, 2013 at 15:51 Maff asked May 9, 2013 at 15:20 MaffMaff 4391 gold badge6 silver badges28 bronze badges 18
  • Does document.all.ITSWUsers.value return the correct value? Can you try document.getElementById('ITSWUsers').value instead? – Mike Christensen Commented May 9, 2013 at 15:24
  • . is a wildcard character in Regex, so you're probably looking for [A-Za-z0-9\.]. There's probably an issue with whatever you're reading in, though. – Otaia Commented May 9, 2013 at 15:26
  • Mike - yes, it returns the correct value, Otaia - I have added the backslash and Mike's suggestion but it still allows the form to submit. – Maff Commented May 9, 2013 at 15:33
  • Also, that regular expression isn't going to require a period. Just anything with letters, numbers, or periods. – Mike Christensen Commented May 9, 2013 at 15:34
  • @Maff - How about something like this? – Mike Christensen Commented May 9, 2013 at 15:37
 |  Show 13 more ments

2 Answers 2

Reset to default 3

To validate line by line, I'd use the split function to turn each line into an array. Then, loop through the array and run your RegEx on each line. That way, you can report exactly what line is invalid. Something like this:

<textarea id="ITSWUsers"></textarea>
<button onclick="Validate()">Validate</button>

<script>
  var usernamecheck = /^[A-Za-z0-9]{5,1000}\.[A-Za-z0-9]{5,1000}$/;

  function Validate()
  {
    var val = document.getElementById('ITSWUsers').value;
    var lines = val.split('\n');

    for(var i = 0; i < lines.length; i++)
    {
      if(!lines[i].match(usernamecheck))
      {
        alert ('Invalid input: ' + lines[i] + '.  Please write the usernames in the correct format (with a full stop between first and last name).');
        return false;
      } 
    }

    window.alert('Everything looks good!');
  }
</script>

I'd trim the input from the textarea using JQuery (or a JS function), and then use this regex:

/^([A-Za-z0-9]+\.[A-Za-z0-9]+(\r)?(\n)?)+$/

Like so:

function testFunc()
{
    var usernamecheck = /^([A-Za-z0-9]+\.[A-Za-z0-9]+(\r)?(\n)?)+$/;

    if(!$.trim(document.all.ITSWUsers.value).match(usernamecheck))
    {
        alert ("Please write the usernames in the correct format (with a full stop between first and last name).");
        return false;
    }
}

<textarea id="ITSWUsers" cols="50" rows="10">
John.smith
Peter.jones1
</textarea>
<button onclick="testFunc()">Click Me</button>

See it working here:

http://jsfiddle/DkLPB/

本文标签: javascriptRegular expression on textareaStack Overflow