천단위 콤마(,)와 소수점(.)모두 표현 + 한글, 영어, (점과 콤마를 제외한)특수문자 제외 정규식 JS







내가 필요한 조건에 모두 부합하는 경우가 없어서 어쩌다보니 직접 만들게 됨……

조건1. 한글, 영어 입력되면 안됨(숫자만 입력가능)

조건2. 특수기호 입력되면 안됨(콤마와 쉼표 제외)

조건3. 천 단위에서 ,(컴마) 자동 생성

조건4. 소수점 입력되면 이후에 입력되는 숫자에는 컴마가 찍히면 안됨(ex. 1,000.2536)

이 모든 조건을 만족하는 경우가 없었다 ㅠㅠㅠㅠㅠㅠ

그래서 이곳저곳에서 정규식 다 가져와서 변경함..

우선 모든 숫자 자체에 포맷넘버 걸어버리면 소수점 뒤의 숫자들에도 콤마(,)가 붙어버리므로

소수점(.)을 기준으로 split 해준다음에 정수부분에만 컴마(,) 붙여준다.

우선 숫자만 입력받으라고 하고,

split하고 나면 [0]번 index, [1]번 index로 나뉘니까 [0] 번 index에다가만 3자리가 되었을때 컴마(,)찍으라고 한다.

그리고 나서 join으로 [0],[1]번 다시 붙여줌

근데 그러고 나니까 숫자 중간에 문자를 넣으니까 입력이 되어버린다….!

그러니까 1,000.2563skdle456 이런식으로 입력이 된다는 말씀….

그래서 최종적으로 소수점(.)과 컴마(,)를 제외한 특수문자, 한글, 영어 나오면 없애준다.

그리고 진짜 이상했던게 한글 모음 ‘ㅣ’만 계속해서 눌리는거다.

한글은 원래 형태소로 구성되어있기때문에 한글 입력 방지를 해도 형태소 1개는 무조건 쳐지는데

‘ㅣ’만 계속해서 쳐짐…(이유를 모르겠네)

예를 들어 1,000.2536ㅣㅣㅣㅣ 이렇게 입력이 가능해진다는거?

다른 모음이나 자음들은 1,000.2536ㅓ 이런식으로 입력하면 더 이상 아무것도 안쳐지는데…

그래서 ㅏ-ㅣ-ㅢ 로 ㅣ도 아예 조건에 넣어버렸다. 그랬더니 안쳐짐

또 해결은했네 …허허허

function noEnKo(val){
      let str = val.split(".");
      str[0] = str[0].replace(/[^-\.0-9]/g,'').replace(/(.)(?=(\d{3})+$)/g,'$1,');
      let fmStr = str.join('.');
      return this.amt1 = fmStr.replace(/[`~!@#$%^&*()_|+\-=?;:'"<>\{\}\[\]\\\|ㄱ-ㅎ|ㅏ-ㅣ-ㅢ|가-힣|a-z|A-Z]/g,'');
    },









© 2018. by sora

Powered by sora