文字列に空白があるかどうかを確認するを試みています。この関数を見つけましたが、機能していないようです:
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+$/
は、文字列がALL whitespaceかどうかをチェックしています:
^
は、文字列の先頭に一致します。\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 を使用したくない場合、2 some
を使用した簡単な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;
}
}