سؤال

أحاول كتابة تعبير منتظم للاختبار كسلسلة. يجب أن تبدأ السلسلة أو تنتهي بطابع أبجدي رقمي.

على سبيل المثال.

test - OK
test$ - OK
$test - OK
$ - not OK
$test$ - not OK

يمكنني اختبار البداية بـ ^\w.*$ والنهاية مع ^\w.*$.

لكن لا يمكنني الجمع بينهم في شيء مثل ^.*\w$ | ^\w.*$.

هل لدى أي شخص أي أفكار أو حتى regex أفضل لهذا الغرض؟

هل كانت مفيدة؟

المحلول

هذا يجب أن يعمل:

^\w.*|.*\w$

نصائح أخرى

ما يلي يجب أن يعمل:

/^\w|\w$/

رغم \w يشمل _ لذلك إذا كنت تريد فقط الحروف والأرقام:

/^[0-9a-zA-Z]|[0-9a-zA-Z]$/

var tests=['test', 'test$', '$test', '$', '$test$'];
var re = /^\w|\w$/;
for(var i in tests) {
  console.log(tests[i]+' - '+(tests[i].match(re)?'OK': 'not OK'));
}

// Results:
test - OK
test$ - OK
$test - OK
$ - not OK
$test$ - not OK
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top