2017-06-02 23 views
2

私はこの単純なコードがうまくいかない理由は考えていません。私は許容されるパターンと文字列を一致させる予定です。 文字列はa-z,A-Z,0-9,_(アンダースコア)、.(ドット)、-(ハイフェン)のいずれかにする必要があります。以下は文字列内の特定の文字のみを許可します。 Javascript

コードです:

var profileIDPattern = /[a-zA-Z0-9_.-]./; 
var str = 'Heman%t'; 
console.log('hemant',profileIDPattern.test(str)); 

コードログ「真」以下の文字列のため、これらの文字列がパターンに一致していませんが。

'Heman%t' -> true 
'#Hemant$' -> true 

私は何が問題なのか分かりません。

答えて

3

この正規表現(/^[a-zA-Z0-9_.-]*$/)にそれを変更してみてください:

var profileIDPattern = /^[a-zA-Z0-9_.-]*$/; 
 
var str1 = 'Hemant-._67%' 
 
var str2 = 'Hemant-._67'; 
 
console.log('hemant1',profileIDPattern.test(str1)); 
 
console.log('hemant2',profileIDPattern.test(str2));

+0

おかげで@ Arg0n、それは働いた。あなたが助けてください、これは*ここで何を意味しますか?私が間違っていないなら、^と$は文字列の開始と終了を意味します。前回このタイプの表現を試みたとき、私はそれを保持していないと思います。 –

+0

@HemantYadav '[]]の中にある文字のうち、0個以上の文字を意味します。 '1つ以上'を望むなら、それを '+'に変更してください。あなたは '^'と '$'について正しいです。 – Arg0n

+0

あなたのパターンに欠陥があります。それは空文字列にもマッチします。 '' '.test(str1) ' –

2

問題:[a-zA-Z0-9_.-][]内の任意の文字に一致し、.はとても基本的に後に何もマッチします、それは言及の文字と一致しますその他の文字

使用^および$アンカーは開始と試合終了を言及し、削除し.

^[a-zA-Z0-9_.-]+[]

[a-zA-Z0-9_.-]+$内の任意の値で始まる:1以上の試合と$は一致

var profileIDPattern = /^[a-zA-Z0-9_.-]+$/; 
 

 
console.log('hemant', profileIDPattern.test('Heman%t')); // no match - 
 
console.log('hemant-._', profileIDPattern.test('hemant-._')); // valid match 
 
console.log('empty',  profileIDPattern.test(''));   // no match ,empty
を終了します

関連する問題