문자열에 공백이 있는지 확인 하려고 합니다 . 이 기능을 찾았지만 작동하지 않는 것 같습니다.
function hasWhiteSpace(s)
{
var reWhiteSpace = new RegExp("/^\s+$/");
// Check for white space
if (reWhiteSpace.test(s)) {
//alert("Please Check Your Fields For Spaces");
return false;
}
return true;
}
그건 그렇고, 나는 RegExp
.
뭔가 잘못 되었나요? 내가 사용할 수있는 더 좋은 것이 있습니까? 바라건대 JQuery.
답변
입력 문자열에 indexOf 메서드를 간단히 사용할 수 있습니다 .
function hasWhiteSpace(s) {
return s.indexOf(' ') >= 0;
}
또는 간단한 RegEx에서 테스트 방법을 사용할 수 있습니다.
function hasWhiteSpace(s) {
return /\s/g.test(s);
}
이것은 또한 Tab과 같은 다른 공백 문자를 확인합니다.
답변
귀하의 정규식은 그대로 아무것도 일치하지 않습니다. 따옴표를 제거해야합니다 "/"
. 문자로 충분합니다.
/^\s+$/
문자열이 모두 공백 인지 확인합니다 .
^
문자열의 시작과 일치합니다.\s+
적어도 1 개, 가능하면 더 많은 공간을 의미합니다.$
문자열의 끝과 일치합니다.
정규식을 /\s/
따옴표없이로 바꾸 십시오.
답변
이 함수는 공백뿐 아니라 다른 유형의 공백 (탭, 캐리지 리턴 등)을 확인합니다.
import some from 'lodash/fp/some'
const whitespaceCharacters = [' ', ' ',
'\b', '\t', '\n', '\v', '\f', '\r', `\"`, `\'`, `\\`,
'\u0008', '\u0009', '\u000A', '\u000B', '\u000C',
'\u000D', '\u0020','\u0022', '\u0027', '\u005C',
'\u00A0', '\u2028', '\u2029', '\uFEFF']
const hasWhitespace = char => some(
w => char.indexOf(w) > -1,
whitespaceCharacters
)
console.log(hasWhitespace('a')); // a, false
console.log(hasWhitespace(' ')); // space, true
console.log(hasWhitespace(' ')); // tab, true
console.log(hasWhitespace('\r')); // carriage return, true
Lodash 를 사용하고 싶지 않다면 다음은 some
2를 사용한 간단한 구현입니다 s
.
const ssome = (predicate, list) =>
{
const len = list.length;
for(const i = 0; i<len; i++)
{
if(predicate(list[i]) === true) {
return true;
}
}
return false;
};
그럼 그냥 교체 some
와 함께 ssome
.
const hasWhitespace = char => some(
w => char.indexOf(w) > -1,
whitespaceCharacters
)
Node의 경우 다음을 사용하십시오.
const { some } = require('lodash/fp');
답변
제안 된 유효성 검사는 다음과 같습니다.
var isValid = false;
// Check whether this entered value is numeric.
function checkNumeric() {
var numericVal = document.getElementById("txt_numeric").value;
if(isNaN(numericVal) || numericVal == "" || numericVal == null || numericVal.indexOf(' ') >= 0) {
alert("Please, enter a numeric value!");
isValid = false;
} else {
isValid = true;
}
}
답변
취할 수있는 한 가지 간단한 접근 방식은 원래 문자열의 길이와 문자열의 길이를 비교하여 공백을 아무것도없는 것으로 바꾸는 것입니다. 예를 들면 :
function hasWhiteSpaces(string) {
if (string.length == string.replace(" ", "").length) {return false}
return true
}
답변
언어를 추가하면 훨씬 더 쉬워지고 조기 복귀를 활용할 수 있습니다.
// Use includes method on string
function hasWhiteSpace(s) {
const whitespaceChars = [' ', '\t', '\n'];
return whitespaceChars.some(char => s.includes(char));
}
// Use character comparison
function hasWhiteSpace(s) {
const whitespaceChars = [' ', '\t', '\n'];
return Array.from(s).some(char => whitespaceChars.includes(char));
}
const withSpace = "Hello World!";
const noSpace = "HelloWorld!";
console.log(hasWhiteSpace(withSpace));
console.log(hasWhiteSpace(noSpace));
console.log(hasWhiteSpace2(withSpace));
console.log(hasWhiteSpace2(noSpace));
성능 벤치 마크를 실행하지 않았지만 정규식보다 빠르지 만 작은 텍스트 스 니펫의 경우 어쨌든 그다지 차이가 없습니다.
답변
몇몇 다른 사람들이 답변을 올렸습니다. false
정규식이 통과 할 때 반환 되고 ^
및 $
연산자가 시작 / 종료를 나타내는 반면 질문은 공백을 포함하지 않고 (정규식이 확인하는) 공백 만 포함 하는 것과 같은 몇 가지 명백한 문제 가 있습니다.
그 외에도 문제는 오타 일뿐입니다.
변경 …
var reWhiteSpace = new RegExp("/^\s+$/");
이에…
var reWhiteSpace = new RegExp("\\s+");
에서 정규식을 사용할 때 RegExp()
다음 두 가지를 수행해야합니다.
- 시작 및 끝
/
괄호를 생략하십시오 . - 모든 시퀀스 코드를 이중 이스케이프합니다 (예 :
\\s
대신\s
).
소스 코드에서 전체 작동 데모 ….
$(document).ready(function(e) { function hasWhiteSpace(s) {
var reWhiteSpace = new RegExp("\\s+");
// Check for white space
if (reWhiteSpace.test(s)) {
//alert("Please Check Your Fields For Spaces");
return 'true';
}
return 'false';
}
$('#whitespace1').html(hasWhiteSpace(' '));
$('#whitespace2').html(hasWhiteSpace('123'));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
" ": <span id="whitespace1"></span><br>
"123": <span id="whitespace2"></span>