正規表現で数字とハイフンのどちらも入力されているかの書き方
解決したいこと
Angularのフォームを利用してバリデーションを行おうとしています。
先頭と末尾が数字で間にハイフンが入るという正規表現の書き方を知りたいです。
/^\d+(\-\d+)$/
上記で数字と数字の間にハイフンが入るということは満たせたのですが、
ハイフンが入力されていない場合はエラーになりません。
ハイフンが未入力時でもエラーとしたいです。
ご回答よろしくお願いいたします。
0 likes
Angularのフォームを利用してバリデーションを行おうとしています。
先頭と末尾が数字で間にハイフンが入るという正規表現の書き方を知りたいです。
/^\d+(\-\d+)$/
上記で数字と数字の間にハイフンが入るということは満たせたのですが、
ハイフンが入力されていない場合はエラーになりません。
ハイフンが未入力時でもエラーとしたいです。
ご回答よろしくお願いいたします。
ハイフンが1個でいいならカッコはいらないですね。
/^\d+\-\d+$/
電話番号っぽくハイフンの数を1個か2個に限定するなら、下記のようになるかと。
/^\d+(\-\d+){1,2}$/
どちらにしろ、下記のようにAngularのFormControlにValidators.patternを入れた場合にはちゃんと動きましたよ?
phonenumber = new FormControl('', Validators.pattern(/^\d+(\-\d+){1,2}$/))
<form>
<p>phone number: <input type="text" placeholder="000-0000-0000"
[formControl]="phonenumber"></p>
</form>
<p *ngIf="phonenumber.errors?.['pattern']">
<strong style="color:red;">Invalid Phone Number!!</strong>
</p>
その正規表現はハイフンが入っていない文字列にはマッチしないのでエラーになるはずですが。バリデーションの書き方は合っていますか?
% node
Welcome to Node.js v22.14.0.
Type ".help" for more information.
> /^\d+(\-\d+)$/.test('123')
false
> /^\d+(\-\d+)$/.test('123-456')
true
@eoao
Questioner
回答ありがとうございます。
なぜかエラーにならないです。
FormControlのValidators.patternを使用しているせいでしょうか?