これは、指定した良い値と悪い値を使用して JavaScript で機能します。
var func = function (str) {
var result = true, match, re = /^([^a-z]+)[a-z]+([^a-z]+)$/i;
if (re.test(str)) {
match = re.exec(str);
re = new RegExp("[" + match[1] + "]");
result = !re.test(match[2]);
}
return result;
};
ここに簡単な説明があります。文字列の文字の前後に非文字が含まれている場合、非文字が抽出され、相互にテストされます。テストの結果を否定して、単語が良いか悪いかを判断します。
str = .'word.
".'", "word", "."
/[.']/.test( "." )
このfunc
関数は、文字列として単語 (スペースのない文字) を想定しています。文を確認したい場合は、スペースで区切ってから各単語を確認してください。このようなもの。
var sentence = "What does .'words'. means?";
var words = sentence.split(/\s+/g);
var areWordsOk;
for( var i = 0, len = words.length; i < len; i++ ){
areWordsOk = func( words[i] );
if( !areWordsOk ){
throw new Error( "bad word." ); // error is thrown
}
}
これが私のテストケースです。ライブ デモはこちら: http://jsfiddle.net/Tb68G/2
テスト ケースのソースは次のとおりです。
var func = function (str) {
var result = true, match, re = /^([^a-z]+)[a-z]+([^a-z]+)$/i;
if (re.test(str)) {
match = re.exec(str);
re = new RegExp("[" + match[1] + "]");
result = !re.test(match[2]);
}
return result;
};
test("test good values", function () {
var arr = [
"word",
".word",
"word.",
".word",
"'word",
"word.'",
".word'"
];
var i = arr.length,
str;
while (i--) {
str = arr[i];
equal(func(str), true, str + " should be true.");
}
});
test("test bad values", function () {
var arr = [
".word.",
".'word.'",
".'word'.",
".'word'"
];
var i = arr.length,
str;
while (i--) {
str = arr[i];
equal(func(str), false, str + " should be false.");
}
});